Hibernate FK本身不在主键上

时间:2012-12-28 12:57:34

标签: hibernate hibernate-mapping

我有一张包含以下结构的表格:

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:实体映射中的重复列:com.sflpro.dto.MyEntity列:ID(应使用insert =“false”update =“false”映射)       在org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:681)〜[hibernate-core-4.1.5.Final.jar:4.1.5.Final]       在org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:703)〜[hibernate-core-4.1.5.Final.jar:4.1.5.Final]       在org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:725)~ [hibernate-core-4.1.5.Final.jar:4.1.5.Final]       在org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:478)〜[hibernate-core-4.1.5.Final.jar:4.1.5.Final]       在org.hibernate.mapping.RootClass.validate(RootClass.java:270)~ [hibernate-core-4.1.5.Final.jar:4.1.5.Final]       在org.hibernate.cfg.Configuration.validate(Configuration.java:1294)〜[hibernate-core-4.1.5.Final.jar:4.1.5.Final]       在org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1736)〜[hibernate-core-4.1.5.Final.jar:4.1.5.Final]       在org.hibernate.ejb.EntityManagerFactoryImpl。(EntityManagerFactoryImpl.java:94)〜[hibernate-entitymanager-4.1.5.Final.jar:4.1.5.Final]       在org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905)〜[hibernate-entitymanager-4.1.5.Final.jar:4.1.5.Final]       ...省略了74个常见帧

那我怎么能做到这一点?

P.S。

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

1 个答案:

答案 0 :(得分:1)

更改以下内容:

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

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