我有两个表之间的多对多关系并在hibernate中生成新的连接表现在如何通过两个表的更新来在连接表中插入记录说两个表是tbluser和tbldomain
我必须从两侧(即来自tbluser和tbldomain)在tbluserdomainrelation中插入记录
目前我只能在保存或更新tbluser时插入连接表中的记录但我想在更新域表中的关系时插入记录
在user.class我写的
@ManyToMany(targetEntity = VirtualDomain.class, cascade = {CascadeType.PERSIST, CascadeType.MERGE},fetch=FetchType.EAGER)
@JoinTable(name = "tblUserDomainRel", joinColumns = @JoinColumn(name = "userid"), inverseJoinColumns = @JoinColumn(name = "domainid"))
public Set<VirtualDomain> getVirtualdomainset() {
return virtualdomainset;
}
public void setVirtualdomainset(Set<VirtualDomain> virtualdomainset) {
this.virtualdomainset = virtualdomainset;
}
Run Code Online (Sandbox Code Playgroud)
在域表中我有条目
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE},fetch=FetchType.EAGER, mappedBy = "virtualdomainset", targetEntity = User.class)
public Set<User> getUserset() {
return userset;
}
public void setUserset(Set<User> userset) {
this.userset = userset;
}
Run Code Online (Sandbox Code Playgroud)
我怀疑你可能会遇到第一个障碍:
如前所述,Hibernate将更新您调用的对象,update()然后按照您在@Cascade属性中指定的规则级联到需要更新的任何后续对象.
问题是您的User类拥有该关系,并且User向该VirtualDomain.userset集合添加对象不会User以任何方式更改该对象.因此即使使用级联,Hibernate也不会更新User对象,因为它不认为它必须.
相反,当您将一个对象添加到VirtualDomain.userset集合时,请确保将该对象VirtualDomain添加到User.virtualdomainset集合中.
// given a VirtualDomain object
VirtualDomain domain = getSession().load( VirtualDomain.class, 1234 );
// and a User object
User user = getSession().load( User.class, 5678 );
// add the User to the VirtualDomain
domain.getUserset().add( user );
// but also add the VirtualDomain to the user
user.getVirtualdomainset().add( domain );
// update the VirtualDomain and the Cascade settings will also update the User
getSession().update( domain );
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我发现提供一个辅助方法来向集合中添加对象很有用,而不是直接访问集合本身.例如
public class VirtualDomain {
Set userset;
/* snip... */
public void addUser( User user ) {
getUserset().add( user );
user.getVirtualdomainset().add( this );
}
}
Run Code Online (Sandbox Code Playgroud)
虽然值得记住Hibernate前辈们的建议:
"在实际系统中,你可能不会有很多-to-many关联.我们的经验是,几乎总是必须连接到每一个环节......最好的方式等信息......是通过中间ASSOCATION类 ".(Java Persistence With Hibernate,p.297/298,ISBN 1-932394-88-5)
你们的课程怎么样?
我想你有一个域类和一个用户类。在 Domain 类中,假设您有一个 Users 集合。将 User 对象添加到 Users 集合中,然后对 Domain 对象调用 SaveOrUpdate。还要确保您指定了正确的级联选项(例如 cascading="save-update".
这就是大局。我们需要有关哪些内容不起作用的更多详细信息。
| 归档时间: |
|
| 查看次数: |
19147 次 |
| 最近记录: |