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();
}
}
我需要覆盖定义了数据库列的实体对象的 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();
}
}