覆盖叶类中的JPA映射

时间:2013-07-12 10:15:10

标签: java hibernate jpa-2.0

我正在使用JPA 2,我的问题是关于JPA 2中的继承和覆盖映射。

我有一个抽象类[AbstractCompte]和两个叶子类[Compte,CompteTmp]。

我想重新定义一个字段nrCompte的映射。

nrCompte在Compte Class中必须是唯一的。 nrCompte在CompteTmp类中是非唯一的。

我已经测试了将@Column放在COmpte和CompteTmp的getter方法中并且它不起作用,结果是nrCompte始终不是唯一的。

@MappedSuperclass
public abstract class AbstractCompte{
  @Id
  @GeneratedValue
  private Long id;

  private String nrCompte;
  ....
  ....
}

@Entity
public class CompteTmp extends AbstractCompte {

    @Column(length=16, unique = false)
    public String getNrCompte() {
         return super.getNrCompte();
    }
}

@Entity
public class Compte extends AbstractCompte {

    @Column(length=16, unique = true)
    public String getNrCompte() {
          return super.getNrCompte();
   }
}

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

JPA提供AttributeOverride,因此您可以像这样映射:

@Entity
@AttributeOverride(name="nrCompte", column=@Column(unique=false))
public class CompteTmp extends AbstractCompte { ... }

@Entity
@AttributeOverride(name="nrCompte", column=@Column(unique=true))
public class Compte extends AbstractCompte { ... }