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

不在主键上将FKHibernate为自身

孟思远
2023-03-14

我有一个如下结构的表:

NUMBER RECORD_ID - PK
STRING NAME
STRING SOME_OTHER_BS
NUMBER ID - the person id i need to group the records by

我在我的Hibernate实体中映射了这样的字段:

long id; // RECORD_ID
String name; // NAME
String someOtherBS; // SOME_THER_BS
long personId; // ID

现在的问题是我需要在实体中拥有一组具有相同 personId 的元素。我试图这样做:

@ManyToOne(fetch= FetchType.LAZY, targetEntity = MyEntity.class)
@JoinColumns( {
    @JoinColumn(name="`ID`", referencedColumnName = "`ID`")
} )
private Set<MyEntity> otherEntities;

但这给了我以下错误:

org.hibernate.MappingException: 映射中的重复列 for entity: com.sflpro.dto.MyEntity column: ID(应该使用 insert=“false” update=“false”) at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:681) ~[hibernate-core-4.1.5.Final.jar:4.1.5.Final] at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:703) ~[hibernate-core-4.1.5.Final.jar:4.1.5.Final] atorg.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:725) ~[hibernate-core-4.1.5.Final.jar:4.1.5.Final] at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:478) ~[hibernate-core-4.1.5.Final.jar:4.1.5.Final] at org.hibernate.mapping.RootClass.validate(RootClass.java:270) ~[hibernate-core-4.1.5.Final.jar:4.1.5.Final] at org.hibernate.cfg.Configuration.validate(Configuration.java:1294) ~[hibernate-core-4.1.5.Final.jar:4.1.5.Final] at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1736) ~[hibernate-core-4.1.5.Final.jar:4.1.5.Final] at org.hibernate.ejb.EntityManagerFactoryImpl.(EntityManagerFactoryImpl.java:94) ~[hibernate-entitymanager-4.1.5.Final.jar:4.1.5.Final] at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905) ~[hibernate-entitymanager-4.1.5.Final.jar:4.1.5.Final] ...省略了 74 个常见帧

那么我如何才能做到这一点呢?

附言

这是一个遗留的数据库,改变它的设计是一个官僚主义的麻烦,所以我宁愿避免这一点。

共有1个答案

百里成仁
2023-03-14

更改以下内容:

@JoinColumn(name="ID", referencedColumnName="RECORD_ID")

请记住,您的主键是< code>RECORD_ID,您的外键是< code>ID

 类似资料:
  • 问题内容: 我试图将我的SQL数据库中表的主键从现有键更改为复合键,其中不包括现有列。由于出现以下错误消息,因此以下代码无法正常工作: 删除主键: PRIMARY附近的语法不正确。预期为COLUMN,CONSTRAINT,ID或QUOTED_ID 添加主键: PRIMARY附近的语法不正确。 期望ID T-SQL代码: 编辑 我可以通过使用以下两个查询语句来完成此操作 我没有要求SQL“ DROP

  • 在模型中,我有一个主键为True的OnetoOne字段。现在我想将其更改为ForeignKey,但无法更改,因为没有“id”。 由此: user=models.OneToOneField(用户,主键=True,on\u delete=models.CASCADE) 为此: user1=models.ForeignKey(用户,相关的\u name='inventory',在\u delete=mo

  • 问题内容: 因此,如果某些表缺少主键,则innodb的行为可能会导致问题。 因此,对于Hibernate,我正在寻找一个键来指定@ElementCollection表上的主键,并使用Set作为基础数据结构。 我找到了一种在地图上具有主键的方法,但这有点奇怪,因为我不需要地图。 我还找到了与@Embeddable相关的答案,但是我不需要那种复杂性。我在实体中使用Set或Set作为数据结构。 知道如何

  • 我在将外键映射为主键时遇到问题。 我的桌子是: 下面是我定义为实体的类: 客户爪哇: 游戏。爪哇: 票爪哇: 票d.java: 到目前为止,我已经尝试了所有的建议,但没有一个有用。另外,我需要这个PK由外键组成,所以我真的需要帮助解决,我应该如何正确地映射它。

  • 所以我有一个表,它用一个昵称作为外键,用一个id作为主键: 到目前为止,一切都很好。然而,每当我试图从发布中获取主键时,它告诉我:“没有唯一的约束来匹配引用表“信息”的给定键。 但是,如果我将表中的信息信息ID更改为唯一,错误就会消失。这是正确的做事方式吗? 提前感谢大家!

  • 问题内容: 兼职勉强的DBA在这里。我想将现有的主键索引从群集更改为非群集。语法在逃避我。 这就是现在的脚本编写方式。 我在在线文档中没有看到ALTER CONSTRAINT语句。 问题答案: 删除聚集索引,然后将主键重新创建为非聚集键: