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

Hibernate: override entity getter to add annotations

我需要覆盖定义了数据库列的实体对象的 getter,在它的超级class 中,所以我可以添加额外的注释。

示例:

@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();
    }

}

Class Person 包含多个实体的公共属性。 Class Employee 扩展 person 并定义数据库 table(table 每个 class 策略)。我还想将 class 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();
  }

}