当前位置: 首页 > 知识库问答 >
问题:

Hibernate:使用join table-org,使用双向多对一映射持久化实体。冬眠PropertyValue异常

杜辉
2023-03-14

你好,我正在尝试将我的一个实体“角色”持久化,它通过连接表与我的另一个实体“用户”保持多对一关系。然而,每次我尝试在没有任何附加用户的情况下插入角色时,都会出现以下错误:org。冬眠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();

目标是能够保存角色,而无需创建用户实例。我已经尝试过的事情:

@多通(可选=true,。。。

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

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

共有1个答案

柯建业
2023-03-14

首先,有没有理由在一对多关系中使用联接表?

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

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

 类似资料:
  • persistenceException:DB2 SQL错误:sqlcode=-206,sqlstate=42703,sqlerrmc=t0.id,driver=3.52.95{prepstmnt 1029586270

  • 1. 前言 本节课程和大家一起聊聊一对多关联映射。通过本节课程,你将了解到: 如何实现一对多关联映射; 如何实现双向一对多关联映射; 关联映射中的级联操作。 2. 一对多关联映射 关系型数据库中表与表中的数据存在一对多(或多对一)关系。 如学生表、班级表。一个班级有多个学生,多个学生可以在同一个班级。 一对多或多对一本质上是一样的,如同一块硬币的正面和反面,只是看待事物的角度不同而已。 数据库中有

  • 问题内容: 映射双向列表时,我不了解Hibernate的行为。Hibernate生成的SQL语句对我来说并不是最佳的。有人可以启发我吗? 情况如下:我有一对多的父子关系。我将此关系与双向列表映射。 根据《Hibernate注释参考指南》(第7章:与索引集合的双向关联),映射应如下所示: 但是在这种情况下,Hibernate在保留一个孩子的父母时会产生三个SQL语句: 第三条语句似乎是多余的,因为并

  • 我想使用Hibernate(4.3.6 Final)持久化一个以基本类型为键、非实体可嵌入复合类型值为值的映射。 我没有任何问题的基本类型作为键和值,我做了所有的方式一样,这是好的。当我将map值更改为可嵌入复合类型时遇到了问题,如下所示。 但我得到了错误: 原因:com.mysql.jdbc.exceptions.jdbc4.mysqlSyntaxerrorexception:“field li

  • 1. 前言 通过本节课程的学习,你将发现关联对象之间的微妙关系。相信这种关系对你更深入地认识 HIbernate 有很大的帮助。 通过本节课程,你将了解到: 多对多双向关联映射中哪一方是关系维系者; 级联操作与关系维系者。 2. 关系维系者 新学期开始了,同学们选择了各自喜欢的课程,现在为学生添加选修课程的任务就要落在 Hibernate 的身上。一起来看看 Hibernate 是如何完成这个任务

  • 我对这些技术是新的,所以提前道歉。 我在我的应用程序中使用了springboot、Spring JPA、hibernate和mapstruct。