【问题标题】:Hibernate Annotations How can I override/ignore an inherited id memberHibernate Annotations 如何覆盖/忽略继承的 id 成员
【发布时间】:2012-05-03 15:51:43
【问题描述】:

我正在从将 id 映射到列的实用程序基类进行扩展

@MappedSuperclass
public abstract class BaseDTO
{
     @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public int id;
    public int getId() {
        return id;}

    public void setId(int id) {
        this.id = id;}
}

该类在许多派生类中用于提供对包含 id 列的表的简化访问和操作。 即

BaseDTO->DBAbstractClass1->DBAbstract2->MyClassDTO
BaseDTO->DBAbstractClass1->DBAbstract3->AnotherADTO
BaseDTO->DBAbstractClass2->DBAbstract4->AnotherBDTO

等等

现在我发现我有一个映射到 MyClassDTO 的表,它没有“id”列(它有一个名为“标识符”的列),但由于架构限制,按正常原因扩展:

[org.hibernate.util.JDBCExceptionReporter] SQL Error: 1054, SQLState: 42S22
[org.hibernate.util.JDBCExceptionReporter] Unknown column 'this_.id' in 'field list'

我尝试将 id 成员覆盖为 @Transient,添加新的 @Id 等,但总是出现上述错误。

要么我找到一种“忽略”或替换继承的 id 的方法,要么我需要复制继承的类而不扩展 BaseDTO,这是一个优秀的程序员应该避免的事情。

我在 Hibernate : How override an attribute from mapped super class 但我不确定它是否能解决我的确切问题。

这可能是一个简单的覆盖,但要小心没有副作用。 有接盘侠吗?

【问题讨论】:

    标签: hibernate annotations overriding inherited


    【解决方案1】:

    我没有找到简单优雅的解决方案。

    我所做的是反转层次结构以创建两个 HelperDTO 类,一个扩展另一个类,第二个包含 id 属性。 HelperDTO 没有 Id 成员,而 HelperWithIdDTO 有一个 Id 成员 即

    HelperDTO->MyClassDTO (classes that do not use id)
    

    HelperDTO->HelperWithIdDTO->OtherDTO (classes that use id)
    

    【讨论】:

      【解决方案2】:

      尝试在您的子类中覆盖对 super 的这些更改?

      @MappedSuperclass
      public abstract class BaseDTO
      {
      
          public int id;
          public int getId() {
              return id;}
      
          @Id
          @GeneratedValue(strategy=GenerationType.AUTO)
          public void setId(int id) {
              this.id = id;}
      }
      

      【讨论】:

      • 我按照你上面的要求做了,并将以下内容添加到派生类`@Transient` public int id; @Id @GeneratedValue(strategy=GenerationType.AUTO) private long other_id; 并得到以下错误 Initial SessionFactory creation failed.org .hibernate.AnnotationException:没有为实体指定标识符:com.mine.something.AnotherDTO
      猜你喜欢
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      • 2015-02-14
      • 2012-01-24
      • 2016-01-19
      • 2011-07-21
      • 2020-08-18
      • 1970-01-01
      相关资源
      最近更新 更多