Hibernate 休眠多对多联接表不填充
我想通过使用联接表的多对多关联来关联两个实体类User和Unit。然而,这并没有达到预期的效果。首先,我将简要地向您展示我到目前为止取得的成果 数据库:Hibernate 休眠多对多联接表不填充,hibernate,jpa,orm,many-to-many,Hibernate,Jpa,Orm,Many To Many,我想通过使用联接表的多对多关联来关联两个实体类User和Unit。然而,这并没有达到预期的效果。首先,我将简要地向您展示我到目前为止取得的成果 数据库: | User | | UserToUnit | | Unit | |Id|login|...| |User_Id|Unit_Id| |Id|name|...| 实体用户: @Entity @Table(name = "\"User\"") public class User
| User | | UserToUnit | | Unit |
|Id|login|...| |User_Id|Unit_Id| |Id|name|...|
实体用户:
@Entity
@Table(name = "\"User\"")
public class User implements Identifiable {
public User() {
units = new ArrayList<Unit>();
}
@Id
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "guid")
@Column(name = "Id", columnDefinition = "uniqueidentifier")
private String id;
@Transient
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "UserToUnit",
joinColumns = { @JoinColumn(name = "User_Id", nullable = false, updatable = false) },
inverseJoinColumns = { @JoinColumn(name = "Unit_Id", nullable = false, updatable = false) }
)
private Collection<Unit> units;
[...]
public Collection<Unit> getUnits() {
return units;
}
public void setUnits(Collection<Unit> ous) {
units= ous;
}
}
但这不会向UserToUnit表添加任何内容。我错过了什么?
干杯
Chris我认为您应该在
用户
类和单位
类中指定您的ID,以匹配将加入@JoinColumn
注释的属性
您能否将此类添加到用户
和单元
中
@Id
@Column(name = "Id")
private long id;
您使用
@Transient
注释的原因是什么?如果您想使用属性访问,并且getter不在字段名后面,那么应该使用它
您混合了字段访问和属性访问,因此还应该将
@access(AccessType.property)
添加到getter方法中,或者将注释移动到字段中。我省略了“[…]”以节省空间。在hibernate中不能有没有Id的实体。哦,好的。您的用户和单元实体是否正常工作,或者您与UserToUnit有相同的问题?已将Id属性添加到我的代码示例中。此外,单个实体也可以工作,是的。@Transient用于将实体序列化为JSON时的JAXB。我不明白你的第二句话。请展开。我把注释误认为javax.persistence.Transient,这意味着该字段将不会被持久化。你不是指javax.xml.bind.annotation.xml吗?我还可以看到,您已将注释移动到该字段,因此我的第二条评论现在不相关。非常感谢!你是对的。某种程度上。我把@Transient
误认为是@xmltranient
注释。欢呼
user.getUnits().add(unit);
unit.getUsers().add(user);
unitDAO.saveOrUpdate(unit);
userDAO.saveOrUpdate(user);
@Id
@Column(name = "Id")
private long id;