Java Hibernate:覆盖实体getter以添加注释
我需要在其超类中重写实体对象的getter,在该对象上定义db列,以便添加其他注释 例如: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
@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
包含多个实体的公共属性。ClassEmployee
扩展person并定义一个数据库表(每个类的表策略)。我还想将类Employee
序列化为XML,因此我需要向其getter添加额外的注释,因此我将覆盖它们
问题是,当我尝试运行这段代码时,我得到了一个HibernateMappingException
语句: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
注释,但似乎没有效果。