【问题标题】:Hibernate mixing inheritance strategies for multi-level hierachy多级层次结构的Hibernate混合继承策略
【发布时间】:2017-02-28 09:16:38
【问题描述】:

我有以下类结构:

我想用hibernate生成如下三个表:

  • PlanItem:及其所有属性
  • 任务:及其所有属性及其子属性
  • 舞台:及其所有属性

我尝试混合继承类型,但没有成功:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class PlanItem {...}

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Stage extends PlanItem {...}

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Task extends PlanItem {...}

@Entity
public class HumanTask extends Task {...}

@Entity
public class ProcessTask extends Task {...}

@Entity
public class CaseTask extends Task {...}

我已经对辅助表进行了试验,并获得了或多或少想要的结果:

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class PlanItem {...}

@Entity
@SecondaryTable( name = "Stage" )
public class Stage extends PlanItem {...}

@Entity
@SecondaryTable( name = "Task" )
public class Task extends PlanItem {...}

@Entity
@SecondaryTable( name = "Task" )
public class HumanTask extends Task {...}

@Entity
@SecondaryTable( name = "Task" )
public class ProcessTask extends Task {...}

@Entity
@SecondaryTable( name = "Task" )
public class CaseTask extends Task {...}

但我想知道是否存在更优雅、更简单的解决方案?

【问题讨论】:

    标签: java database hibernate persistence hibernate-mapping


    【解决方案1】:

    目前不可能,请参阅following issue 了解更多信息。我认为你使用辅助表的“hack”是目前你能得到的最好的。

    【讨论】:

    • 感谢您的回答。在您的链接中,他们说“对此的修复已经在 5.0 代码库中到位。我预计不会在 4.x 中解决这个问题。”。我使用了 Hibernate-core-5.0.2.final.jar,但这个版本的 Hibernate 也无法使用。
    • 这就是为什么它没有解决,仍然没有完全实现。
    猜你喜欢
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    相关资源
    最近更新 更多