【问题标题】:Hibernate: point foreign_key to secondary table休眠:将外键指向辅助表
【发布时间】:2017-02-28 09:36:19
【问题描述】:

我有三个班级:

  • 计划项目
  • 任务
  • 人工任务

它具有以下层次结构:

public abstract class PlanItem {...}

public class Task extends PlanItem {...}

public class HumanTask extends Task {...}

我正在使用休眠生成两个表:“PlanItem”及其所有属性 以及“任务”及其所有属性及其子属性。

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

@Entity
@SecondaryTable( name = "Task" )
public class Task extends PlanItem {
    @ElementCollection
    private Set<String> properties;

}

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

Hibernate 会为属性创建一个额外的表,但 foreign_key 会指向 到“PlanItem”表。如何让 foreign_key 指向“任务”表?

【问题讨论】:

    标签: java database hibernate persistence hibernate-mapping


    【解决方案1】:

    你可以尝试用@ForeignKey映射它

    @ElementCollection
    @CollectionTable(
      name = "task_properties",
      joinColumns = {
        @JoinColumn(
          name = "task_id"
        )
      },
      foreignKey = @ForeignKey(
        foreignKeyDefinition = "FOREIGN KEY (task_id) REFERENCES Task"
      )
    )
    private Set<String> properties;
    

    您可能需要最新的休眠版本,因为我认为能够一致地指定外键仅在 5.0 by HHH-9709 中部分得到修复,而在 5.2 by HHH-11180 中完全得到修复。

    【讨论】:

    • 谢谢,但它仍然被映射到 planItem。
    • 映射是什么意思?意思是它加入了那个表或者生成的 FK 仍然是错误的表?
    • 生成的 FK 仍然是错误的表,即“PlanItem”而不是“Task”
    • 哪个Hibernate版本? ForeignKeys 的许多问题在 5.2.8 中得到修复
    • 我更新了解决方案并实际验证了它的工作原理。您必须在 @CollectionTable 上定义 @ForeignKey 注释而不是 @JoinColumn
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    相关资源
    最近更新 更多