【问题标题】:How to ignore subclasses in hibernate entities when persisting持久化时如何忽略休眠实体中的子类
【发布时间】:2017-02-07 13:23:02
【问题描述】:

我有一个像这样的简单实体类

@Entity
public class Car{
   @Column protected String name;
}

一切正常,但现在我想使用这个实体的子类或匿名类。

public class TestCar extends Car{
    TestCar(){ this.name = "Test"; }
}

void foo(){
   Car c = new Car(){
             { this.name = "Lone"; }
           };
   // ...
}

这些子类仅用于实例化目的,hibernate 可以完全忽略。

但是当我尝试保存实体时,我得到一个“未知实体”-异常。

有没有办法让hibernate忽略这些子类?

编辑:如果我们能找到问题的答案,那就太好了。讨论所有其他(众所周知的)模式没有帮助(至少对我没有帮助)。您应该看到这只是一个非常简化的示例,用于澄清问题。 (也许你应该忽略用例)

刚刚发现这个可能的重复项(也没有解决方案):How to persist an entity from an non-entity subclass in Hibernate

【问题讨论】:

  • 您可以尝试将其转换为超类,但我怀疑它会起作用 - 只是从未测试过。为什么不能简单地创建Car 而不是继承它?
  • 投射不起作用。我唯一的解决方案是将所有属性的完整副本复制到一个新的“普通”汽车对象中,但这非常不方便。
  • 这就是我提到的。为此创建工厂方法,它将变得方便和简单。

标签: java hibernate jpa inheritance


【解决方案1】:

这是行不通的。

恕我直言,您应该重新考虑您的设计。 TestCar 或匿名 Car 类真的是 Car 的子类型吗?我认为您使用错误的工具来创建实例。您可以使用 Builder 模式。

【讨论】:

    猜你喜欢
    • 2012-01-09
    • 1970-01-01
    • 2019-12-08
    • 2020-02-14
    • 2018-09-09
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多