Java 如何在Hibernate中通过具有不同名称的非PK列映射2个表
我有两个表,它们可能通过非PK辅助列相互关联。此外,此匹配的列名在每个表中都是不同的。就是Java 如何在Hibernate中通过具有不同名称的非PK列映射2个表,java,hibernate,Java,Hibernate,我有两个表,它们可能通过非PK辅助列相互关联。此外,此匹配的列名在每个表中都是不同的。就是 @Entity @Table(name = "PLANS_T") public class Plans { private Integer id; // PK //... private String secondaryIdentifier; // Should be matched with TRAINEES.auxiliaryIdentifier /
@Entity
@Table(name = "PLANS_T")
public class Plans {
private Integer id; // PK
//...
private String secondaryIdentifier; // Should be matched with TRAINEES.auxiliaryIdentifier
//...
}
@Entity
@Table(name = "TRAINEES_T")
public class Trainee {
private Integer id; // PK
//...
private String auxiliaryIdentifier; // Should be matched with PLANS.secondaryIdentifier
}
计划
和学员
之间的关系是多对一的:您可以为一名学员制定多个计划
我需要对它们进行适当的注释,以表明PLANS\u T.secondaryIdentifier
应与Tradients\u T.auxiliaryIdentifier
一起用于JOIN
s(例如在Criteria API中,它需要从一个表到另一个表的连接路径)
但是我不能用这个
@实体
班级学员{
@OneToMany(mappedBy=“计划”)
私人收集计划=新建ArrayList();
}
@实体
课堂计划{
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“auxiliary_identifier”)//我在哪里指定“secondaryIdentifier”,一个非PK列?
私人见习生;
}
我需要一种方法来指定注释中的两个非PK列。使用Criteria API时,这些注释提供了创建连接路径的路径。您应该按照以下方式更正映射:
@实体
班级学员{
@OneToMany(mappedBy=“培训生”)
私有列表计划=新建ArrayList();
}
@实体
课堂计划{
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“次要_标识符”,referencedColumnName=“辅助_标识符”)
私人见习生;
}
@OneToMany
的mappedBy
是拥有关系的字段的名称。这是计划
实体的培训生
字段
@JoinColumn
的referencedColumnName
是此外键列引用的列的名称
谢谢,事实正好相反:在
计划中,它应该是@JoinColumn(name=“secondary\u identifier”,referencedColumnName=“auxiliary\u identifier”
。换句话说,@JoinColumn
是这个表的列。否则,它工作得很好,谢谢!您可能需要更新答案。
@Entity
class Trainee {
@OneToMany(mappedBy = "plan")
private Collection<Plans> plans = new ArrayList<Plans>();
}
@Entity
class Plans {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="auxiliary_identifier") // Where do I specify "secondaryIdentifier", a non-PK column?
private Trainee trainee;
}