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

Java Hibernate:覆盖实体getter以添加注释,java,hibernate,jpa,inheritance,orm,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 = n

我需要在其超类中重写实体对象的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
包含多个实体的公共属性。Class
Employee
扩展person并定义一个数据库表(每个类的表策略)。我还想将类
Employee
序列化为XML,因此我需要向其getter添加额外的注释,因此我将覆盖它们

问题是,当我尝试运行这段代码时,我得到了一个Hibernate
MappingException
语句:Employee中发现的名称的重复属性映射


有没有一种方法可以告诉Hibernate Employee中的名称getter不是重复的,而是被覆盖的(可能带有一些注释)。或者是否有其他方法来执行我需要的操作?

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

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

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

}

这是未经测试的代码,但我希望它能工作,使用@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();
  }

}

在我写完这个问题后,我突然想到了这件事。我试过了,它看起来确实有效,但我不喜欢它,因为当在实际持久化的属性上有@Transient注释时,它看起来很混乱。但如果没有更好的办法,我会坚持这个解决方案。谢谢。不幸的是,Java方法重写也不适用于JPA元数据。这只适用于某些注释吗?我试着做同样的事情,向一个子类添加一个
@OrderBy
注释,但似乎没有效果。