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

Spring JPA保存@OneTomany关系的现有实体

董奇思
2023-03-14

我有2个实体(我删除了无用的字段):

@Entity
public class ApkPermissions {
    @Id
    @GeneratedValue
    @JsonIgnore
    private Long id;

    @OneToMany
    @Cascade({CascadeType.SAVE_UPDATE})
    private Collection<Permission> declaredPermissions;
}

而且

@Entity
public class Permission {
    @Id
    @GeneratedValue
    @JsonIgnore
    private Long id;

    @Column(unique = true)
    private String permissionName;
}

这似乎符合我的情况(也是我当前的实现),但它不起作用。

我得到以下错误消息

could not execute statement; SQL [n/a]; constraint [UK_l3pmqryh8vgle52647itattb9]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement",

来自MySQL:

UNIQUE KEY `UK_l3pmqryh8vgle52647itattb9` (`permission_name`)

临时解决方案是从存储库中检索所有相应的权限(按permissionName搜索)。那么保存效果很好。逻辑上是正确的,但我希望有一个更简单的程序...

共有1个答案

姜聪
2023-03-14

在OneToMany映射中,您的权限表将有一个额外的列,它将是指向您的apkPermissions的外键。例如:

ApkPermission           Permission
APK_ID | Name           Permission_ID | Name | APK_ID(FK)
1      | APK1            1            | P1   | 1
                         2            | P2   | 1

因此您不能从任何其他ApkPermission记录中指向相同的权限。假设,如果您希望在ApkPermission中输入2个APK2,并且希望再次指向P1和P2。你不能用一对多的关系做这件事,除非你在权限表中再做一次P1和P2条目。这将创建副本。因此,这里有两个选项,要么删除唯一约束(在permissionName上),要么将映射更改为ManyTomany。

 类似资料:
  • 问题内容: 我将Spring和Hibernate用作JPA提供程序,并尝试获取@OneToMany(具有许多电话号码的联系人)以将外键保存在电话号码表中。从我的表单中,我得到一个Contact对象,其中有一个Phone(数字)列表。Contact可以正确持久保存(Hibernate从指定序列中获取PK)。电话(号码)列表也将保留正确的PK,但“联系人”表中没有FK。 希望我掌握了以上所有相关内容,

  • 我在Symfony2.8上遇到了一个多实体关系的问题。我有实体旅行,它可以由许多经验实体组成。 以下是我的旅行定义: 另一方面,我有经验实体: 在控制器中,用户可以生成一个新的行程,将对象置于会话中以调用它,直到真正的关联。 问题。在第一次通话时,它就像一个魔咒,添加experience\u trip条目,一切正常。在第二次调用时,具有不同经验的trip persisting正在寻找经验实体上的级

  • 保存“我的实体”时,通过关系工作的子实体不会保存到它们的表中。我不明白怎么回事。 员工: EmployeePhoneNumber: 如何设置这些字段,然后保存实体: 在完成该方法后,我没有一个错误,所有的工作都是正确的,只是表格没有填满--为什么?

  • 在我的Spring/MySql系统中,我有一些Jpa实体,它们通过父关系上的joinTable在OneToMany关系中连接。在这种情况下,一个帖子有很多评论。 如果我尝试删除Post实体,问题是生成的SQL试图删除仍在连接表中的注释,从而触发外键冲突。 什么是正确的方法: 删除连接表项 删除连接表左侧父关系实体 删除连接表右侧子关系实体 要记住的一些事情: 还有其他实体通过oneTo多项关系拥有

  • 我正在使用Spring MVC/Security/JPA/Hibernate开发一个web应用程序。 我有一个用户类,它与UserRole有一个omany关系。 UserRole类与用户之间有很多关系。 用户存储库界面非常简单。 当我使用下面的代码片段使用存储库加载用户信息时,它会很好地检索用户和用户角色数据。 这是日志文件。 然而,问题出在这里。 如果我使用UserRepository的save

  • 我有一个实体: 要创建上述实体并将其保存到JPA存储库中,我将执行以下操作: 由于DB中的表存储了候选对象的FK,我认为设置一个id就足够了。但JPA希望我设置候选对象。这迫使我查询候选存储库。 是否需要从候选库中查询候选人以保存,或者如果我有可用的候选人id,我不能直接设置它?