Java Hibernate:使用联接表-org.Hibernate.PropertyValueException持久化具有双向多对一映射的实体

Java Hibernate:使用联接表-org.Hibernate.PropertyValueException持久化具有双向多对一映射的实体,java,hibernate,hibernate-mapping,Java,Hibernate,Hibernate Mapping,您好,我正在尝试将我的一个实体“角色”持久化,它通过联接表与我的另一个实体“用户”具有多对一关系。但是,每次尝试在没有任何附加用户的情况下插入角色时,都会出现以下错误:org.hibernate.PropertyValueException:notnull属性引用null或瞬时值。 我的角色实体映射到用户: @ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeT

您好,我正在尝试将我的一个实体“角色”持久化,它通过联接表与我的另一个实体“用户”具有多对一关系。但是,每次尝试在没有任何附加用户的情况下插入角色时,都会出现以下错误:org.hibernate.PropertyValueException:notnull属性引用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;
目标是能够保存角色,而无需创建用户实例。 我已经尝试过的事情:

@多通(可选=真

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

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

首先,是否有任何理由在一对多关系中使用联接表

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

或者角色实体实际上与用户相关,但我会省略一个联接表

...
Role newRole = new Role();
            newRole.setRoleName(roleName);
            roleAfterSave = manager.merge(newRole);
            manager.getTransaction().commit();