有人可以在休眠状态下向我解释@MapsId 吗?

新手上路,请多包涵

有人可以在休眠状态下向我解释 @MapsId 吗?我很难理解它。

如果有人能用一个例子来解释它,它最适用于什么样的用例,那就太好了?

原文由 brainydexter 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 494
2 个回答

这是 Object DB 的一个很好的解释。

指定 ManyToOne 或 OneToOne 关系属性,为 EmbeddedId 主键、EmbeddedId 主键中的属性或父实体的简单主键提供映射。 value 元素指定关系属性对应的复合键中的属性。如果实体的主键与关系引用的实体的主键具有相同的 Java 类型,则不指定值属性。

 // parent entity has simple primary key

@Entity
public class Employee {
   @Id long empId;
   String name;
   ...
}

// 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;
}

在此处阅读 API 文档

原文由 ManuPK 发布,翻译遵循 CC BY-SA 3.0 许可协议

我发现此注释也很有用: @MapsId 在休眠注释中将一列映射到另一个表的列。

它也可以用于在 2 个表之间共享相同的主键。

例子:

 @Entity
@Table(name = "TRANSACTION_CANCEL")
public class CancelledTransaction {
    @Id
    private Long id; // the value in this pk will be the same as the
                     // transaction line from transaction table to which
                     // this cancelled transaction is related

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "ID_TRANSACTION", nullable = false)
    @MapsId
    private Transaction transaction;
    ....
}

@Entity
@Table(name = "TRANSACTION")
@SequenceGenerator(name = "SQ_TRAN_ID", sequenceName = "SQ_TRAN_ID")
public class Transaction  {
    @Id
    @GeneratedValue(generator = "SQ_TRAN_ID", strategy = GenerationType.SEQUENCE)
    @Column(name = "ID_TRANSACTION", nullable = false)
    private Long id;
    ...
}

原文由 Tonsic 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题