gpt4 book ai didi

java - Hibernate:使用连接表进行双向多对一映射的持久实体 - org.hibernate.PropertyValueException

转载 作者:行者123 更新时间:2023-12-01 18:33:51 24 4
gpt4 key购买 nike

您好,我正在尝试保留我的一个实体“角色”,它通过连接表与我的另一个实体“用户”具有多对一关系。但是,每次我尝试在没有附加任何用户的情况下插入角色时,都会收到以下错误: org.hibernate.PropertyValueException:非空属性引用空值或 transient 值。我的角色实体映射到用户:

@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(optional = true,...

@JoinColumn(name = "cUserRolesRoleId", referencedColumnName = "cRoleId",nullable = true)

如果您需要更多代码,请告诉我!感谢您提前的帮助!

最佳答案

首先,是否有理由在一对多关系中使用连接表?

我认为,要么应该有一个“角色定义”表,其中定义角色类型,但角色实体不应该与具体用户相关。这种关系应该是多对多的。对我来说,这更有意义。

或者角色实体确实与用户相关,但我会省略连接表。

关于java - Hibernate:使用连接表进行双向多对一映射的持久实体 - org.hibernate.PropertyValueException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60102424/

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