2012-11-12 54 views
0

我正在使用Hibernate 4.1.0.Final和hibernate-jpa-2.0-api。我在使用實體管理器更新具有OneToMany關係的實體時遇到問題。下面是實體:JPA實體管理器沒有正確更新OneToMany關係的字段

@GenericGenerator(name = "uuid-strategy", strategy = "uuid.hex") 
@Entity 
@Table(name = "cb_organization", uniqueConstraints = {@UniqueConstraint(columnNames={"organization_id"})}) 
public class Organization implements Serializable 
{ 

    … 
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST) 
    @JoinTable(name = "cb_organization_address", 
       joinColumns = @JoinColumn(name = "organization_id"), 
       inverseJoinColumns = @JoinColumn(name = "address_id")) 
    private List<Address> addresses; 

當我嘗試和更新一個新的一對多名單的實體(使用實體管理器的合併方法),該地址沒有得到保存。我創建列表,像這樣...

List<Address> addresses = new ArrayList<Address>(); 
    addresses.add(address); 
    ... 
    org.setAddresses(addresses); 
    m_orgDao.save(org); 

,這裏是相關的DAO代碼...

@Autowired 
private EntityManager entityManager; 

@Override 
public Organization save(Organization organization) 
{ 
    if(StringUtils.isEmpty(organization.getId())) 
    { 
     entityManager.persist(organization); 
    } 
    else 
    { 
     organization = entityManager.merge(organization); 
    } 

    return organization; 
} 

返回的組織在其所有的字段都是空的地址。我可以對我的實體經理和實體做不同的處理,以確保數據得到正確保存。

回答

1
@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE}) 

,而不是

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)