我需要覆盖一个实体对象的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不重复但只是覆盖(可能带有一些注释)。或者还有另一种方法可以做我需要的吗?
答案 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();
}
}