Hibernate:覆盖实体getter以添加注释

时间:2015-03-25 09:33:51

标签: java hibernate jpa inheritance orm

我需要覆盖一个实体对象的getter,在其上定义了db列,在它的超类中,所以我可以添加额外的注释。

示例:

@MappedSuperclass
public class Person {

    String name;

    @Column(name = "name")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

@Entity
@Table(name="employee")
@XmlType(name="employee")
public class Employee extends Person {

    @Override
    @XmlAttribute(name = "name")
    public String getName() {
        return super.getName();
    }

}

Person包含多个实体的公共属性。类Employee扩展person并定义数据库表(每个类策略的表)。我还想将类Employee序列化为XML,因此我需要向其getter添加其他注释,因此我将覆盖它们。

问题在于,当我尝试运行此代码时,我得到一个Hibernate MappingException说:在Employee中找到的名称的重复属性映射。

有没有办法告诉Hibernate Employee中的名称getter不重复但只是覆盖(可能带有一些注释)。或者还有另一种方法可以做我需要的吗?

2 个答案:

答案 0 :(得分:3)

尝试将@Transient添加到覆盖属性:

@Entity
@Table(name="employee")
@XmlType(name="employee")
public class Employee extends Person {

    @Override
    @XmlAttribute(name = "name")
    @Transient
    public String getName() {
        return super.getName();
    }

}

答案 1 :(得分:-1)

这是未经测试的代码,但我希望它能正常工作,使用@AttributeOverride这样的注释

@Entity
@Table(name="employee")
@XmlType(name="employee")
@AttributeOverride(name = "name", column = @Column(name = "name"))
public class Employee extends Person {

  @Override
  @XmlAttribute(name = "name")
  public String getName() {
    return super.getName();
  }

}