【问题标题】:Hibernate: override entity getter to add annotationsHibernate:覆盖实体获取器以添加注释
【发布时间】:2015-03-25 09:33:50
【问题描述】:

我需要在它的超类中覆盖定义了 db 列的实体对象的 getter,因此我可以添加额外的注释。

例子:

@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 不是重复的,而是被覆盖(可能带有一些注释)。还是有其他方法可以满足我的需要?

【问题讨论】:

    标签: java hibernate jpa inheritance orm


    【解决方案1】:

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

    @Entity
    @Table(name="employee")
    @XmlType(name="employee")
    public class Employee extends Person {
    
        @Override
        @XmlAttribute(name = "name")
        @Transient
        public String getName() {
            return super.getName();
        }
    
    }
    

    【讨论】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-04
      • 2016-02-18
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      相关资源
      最近更新 更多