![](/img/trans.png)
[英]JPA/Hibernate OneToMany relationship from Embedded entity by non-PK columns
[英]How to map 2 tables through non-PK columns with different names in Hibernate
我有 2 个表,它们可能通过非 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 = "TRAINEES_T")
public class Trainee {
private Integer id; // PK
//...
private String auxiliaryIdentifier; // Should be matched with PLANS.secondaryIdentifier
}
PLANS
和TRAINEE
之间的关系是多对一的:您可以为受训者制定多个计划。
我需要正确注释这些以指示PLANS_T.secondaryIdentifier
应与TRAINEES_T.auxiliaryIdentifier
一起用于JOIN
(例如在标准 API 中,它需要从一个表到另一个表的连接路径)。
但我不能使用典型的例子,例如
@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;
}
我需要一种方法来指定注释中的两个非 PK 列。 使用 Criteria API 时,这些注释提供了创建 Join 路径的路径。
您应该通过以下方式更正您的映射:
@Entity
class Trainee {
@OneToMany(mappedBy = "trainee")
private List<Plans> plans = new ArrayList<Plans>();
}
@Entity
class Plans {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="secondary_identifier", referencedColumnName = "auxiliary_identifier")
private Trainee trainee;
}
@OneToMany
的mappedBy
是拥有关系的字段的名称。 这是Plans
实体的trainee
字段。
@JoinColumn
的referencedColumnName
是该外键列引用的列的名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.