[英]Hibernate: persist entity with bidirectional many-to-one mapping with join table - org.hibernate.PropertyValueException
您好,我正在尝试保留我的一个实体“角色”,它通过连接表与我的另一个实体“用户”具有多对一的关系。 然而,每次我尝试在没有附加任何用户的情况下插入角色时,我都会收到以下错误:org.hibernate.PropertyValueException:not-null 属性引用空值或瞬态值。 我的角色实体映射到用户:
@ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH,
CascadeType.DETACH })
@JoinTable(name = "t_UserRoles", joinColumns = {
@JoinColumn(name = "cUserRolesRoleId", referencedColumnName = "cRoleId") }, inverseJoinColumns = {
@JoinColumn(name = "cUserRolesUserId", referencedColumnName = "cUserId") })
private User user;
我的用户角色:
@OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.DETACH })
@JoinTable(name = "t_UserRoles", joinColumns = {
@JoinColumn(name = "cUserRolesUserId", referencedColumnName = "cUserId") }, inverseJoinColumns = {
@JoinColumn(name = "cUserRolesRoleId", referencedColumnName = "cRoleId") })
private Set<Role> roles;
引发异常的代码:
...
Role newRole = new Role();
newRole.setRoleName(roleName);
roleAfterSave = manager.merge(newRole);
manager.getTransaction().commit();
目标是能够在不需要创建用户实例的情况下保存角色。 我已经尝试过的事情:
@ManyToOne(可选=真,...
@JoinColumn(name = "cUserRolesRoleId", referencedColumnName = "cRoleId",nullable = true)
如果您需要更多代码,请告诉我! 我在这里先向您的帮助表示感谢!
首先,有没有理由在一对多关系中有一个连接表?
我认为,或者,应该有一个“角色定义”表,其中定义了角色类型,但是角色实体不应该与具体用户相关。 这种关系应该是多对多的。 对我来说,这更有意义。
或者 Role 实体确实与用户相关,但是我会省略连接表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.