我想定义一个表,其中整个记录是主键。该表有两列,它们是对其他实体的引用。
@Entity
public class ProtoList implements Serializable {
@Id
@ManyToOne ProtoObject listID;
@Id
@OneToOne ProtoObject po;
ProtoObject是一个实体,其@Id是常规生成的Long。
生成的关系数据结构旨在允许任何ProtoObject与ProtoObject的任意长List(实际上是Set)相关联。所以两个表格列只有两个Longs,总是唯一的。
这有用还是我必须定义@IdClass或其他东西?
答案 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 的主键是长,所以这样可行。整个记录是我想要的主键。经验教训。