0

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

@Entity
public class ProtoList implements Serializable {

  @Id
  @ManyToOne ProtoObject  listID;

  @Id
  @OneToOne  ProtoObject  po;

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

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

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

4

1 回答 1

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的主键是Long,所以这行得通。整个记录是我想要的主键。学过的知识。

于 2013-09-14T22:40:19.087 回答