我是一名学生,我是 Hibernate 框架的新手,我有一个关联类 我想知道如何映射它 情况:
Entity_1[0..\*]-------------------------[0..\*]Entity_2
|
|
|
|
|
Association class
Date_affectation
Date_expiration
我应该使用什么关联规则?
最佳答案
您可以将关联建模为单独的 Association
实体。时间数据可以建模为常规 Date
属性(如 @Temporal(TemporalType.TIMESTAMP)
)。
您可以将关联的 PK 建模为 Entity_1
和 Entity_2
的外键组合 - 这将使关联成为依赖实体。或者您可以为其分配一个自己的 ID,并通过 ManyToOne 关系连接到 Entity_1
和 Entity_2
。
编辑:我的大部分示例实现都是无耻地从@Vlad 的回答中窃取的,因为主要区别在于实体有一个 id 并且是可查询的,而可嵌入的则没有。
我已经从日期列中删除了 @Column(updatable=false)
,因为我不确定这是必需的并添加了 @Temporal(TemporalType.TIMESTAMP)
因为它是 required by the JPA spec从而增加了便携性。
由于这是一个双向映射,我在反面(实体)使用 mappedBy
而不是在拥有方(关联)使用 JoinColumn
。
@Entity
public class Association {
@Id
@GeneratedValue(...)
private Long id;
@Column
@Temporal(TemporalType.TIMESTAMP)
private Date affectation;
@Column
@Temporal(TemporalType.TIMESTAMP)
private Date expiration;
@ManyToOne(fetch=FetchType.LAZY)
private Entity1 entity1;
@ManyToOne(fetch=FetchType.LAZY)
private Entity2 entity2;
}
Entity1和Entity2看起来是一样的,只是把数字换掉了。我不确定使用 Set
接口(interface)的附加值,所以我将其替换为 List
,但也许我遗漏了什么。
public class Entity1 {
@OneToMany(mappedBy="entity1")
private List<Association> associations = new ArrayList<Association>();
...
}
关于java - Hibernate 中的关联类映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23780135/