在我看来,以下两种映射方式之间几乎没有区别。这是一个基于@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键的一个表的表,如...UserTableEmailTable-> @MapsId(owner)UserTable owner@MapsId(receiver) UserTable receiver我对此有问题。 Hibernate引发异常。所以我必须回到旧的@JoinColumn方法。那是我遇到的那种不同之处。

10-08 01:47