Mock JOINED继承策略没有实际继承

时间:2011-10-07 12:43:52

标签: java hibernate jpa-2.0

我想使用混合@Inheritance策略,但Hibernate不支持它 有没有办法实现 JOINED 继承而没有实际的类继承。 例如:

@Entity
@Table(name="A")
@Inheritance(strategy=InheritanceType.JOINED)
public class A { 
  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ID_SEQ")
  private Long id;

  //getters
  //setters
}

@Entity
@Table(name="B")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class B {
  @Id
  private Long id;

  //getters
  //setters
}

所以,基本上在B我只想引用A中生成的@Id,而不是从A延伸。

2 个答案:

答案 0 :(得分:1)

我找到了解决方案。 JPA不允许您合并@Id@OneToOne。但是,@MapsId注释可以解决问题:

@Entity
public class A { 
  @Id
  private Long id;

  //getters
  //setters
}

@Entity
public class B {
  @Id
  private Long id;

  @MapsId
  @OneToOne(optional=false, fetch=FetchType.EAGER)
  @JoinColumn(nullable=false, name="id")
  private A a;

  //getters
  //setters
}

答案 1 :(得分:0)

我认为您可以通过建立@OneToOne关系或@OneToMany来实现此目的,并将表名称指向此

  @Id @OneToOne
  @JoinColumn(name = "id")
  private A a;