我可以在实体中使用多个@Id注释吗?

时间:2013-09-08 03:30:39

标签: jpa jpa-2.0

我想定义一个表,其中整个记录是主键。该表有两列,它们是对其他实体的引用。

@Entity
public class ProtoList implements Serializable {

  @Id
  @ManyToOne ProtoObject  listID;

  @Id
  @OneToOne  ProtoObject  po;

ProtoObject是一个实体,其@Id是常规生成的Long。

生成的关系数据结构旨在允许任何ProtoObject与ProtoObject的任意长List(实际上是Set)相关联。所以两个表格列只有两个Longs,总是唯一的。

这有用还是我必须定义@IdClass或其他东西?

1 个答案:

答案 0 :(得分:0)

经过一些实验,我发现确实有必要使用 @IdClass 注释。有趣的是,在Entity本身,我有 @ManyToOne @OneToOne 注释来创建 ProtoObjects 的关系链接,但是在IdClass中相应的字段是从 ProtoObject 的自己的ID字段推断出来的。

结果是:

@Entity
@IdClass(ProtoListKey.class)
public class ProtoList implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @ManyToOne ProtoObject  listID;

    @Id
    @OneToOne  ProtoObject  po;

关键是:

public class ProtoListKey {

    private Long listID;

    private Long po;

ProtoList 的主键是,所以这样可行。整个记录是我想要的主键。经验教训。