在我看来,以下两种映射方式之间几乎没有区别。这是一个基于@MapsId
javadoc的示例:
// parent entity has simple primary key
@Entity
public class Employee {
@Id long empId;
...
}
// dependent entity uses EmbeddedId for composite key
@Embeddable
public class DependentId {
String name;
long empid; // corresponds to primary key type of Employee
}
@Entity
public class Dependent {
@EmbeddedId DependentId id;
...
@MapsId("empid") // maps the empid attribute of embedded id
@ManyToOne Employee emp;
}
如果我将Dependent的映射更改为:
@Entity
public class Dependent {
@EmbeddedId DependentId id;
@ManyToOne
@JoinColumn("empid", insertable=false, updatable=false)
Employee emp;
}
上面两种方法有什么区别?
最佳答案
因此,当我在表中只有一个前键时,我测试了@MapsId的用法,这没有什么不同。但是对于我有两个foreg键的一个表的表,如...UserTable
和EmailTable
-> @MapsId(owner)UserTable owner
,@MapsId(receiver) UserTable receiver
我对此有问题。 Hibernate引发异常。所以我必须回到旧的@JoinColumn方法。那是我遇到的那种不同之处。