gpt4 book ai didi

hibernate - 如何在多对多 hibernate 注释的连接表中插入记录?

转载 作者:行者123 更新时间:2023-12-03 12:55:17 25 4
gpt4 key购买 nike

我有两个表之间的多对多关系并在 hibernate 中生成新的连接表
现在如何通过更新两个表在连接表中插入记录
说两个表是 tbluser 和 tbldomain

我必须从双方的 tbluserdomainrelation 中插入记录(即来自 tbluser 和 tbldomain)

目前我只能在保存或更新 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;
}

在域表中我有条目
@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;
}

最佳答案

我怀疑你可能会跌倒在第一个障碍:

如前所述,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 );

在这种情况下,我发现提供一种用于将对象添加到集合的辅助方法很有用,而不是使用对集合本身的直接访问。例如
public class VirtualDomain {

Set userset;

/* snip... */

public void addUser( User user ) {
getUserset().add( user );
user.getVirtualdomainset().add( this );
}
}

虽然值得记住 Hibernate 前辈的建议:

"In a real system, you may not have a many-to-many association. Our experience is that there is almost always other information that must be attached to each link... the best way... is via an intermediate assocation class." (Java Persistence With Hibernate, p. 297/298 , ISBN 1-932394-88-5)

关于hibernate - 如何在多对多 hibernate 注释的连接表中插入记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/843020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com