【问题标题】:Jpa/Hibernate map foreign key without relationshipJpa/Hibernate映射外键没有关系
【发布时间】:2020-06-25 15:34:23
【问题描述】:

在JPA/Hibernate中,是否可以在不添加关系的情况下表达外键?

在聚合根的 DDD 中,我想拥有其他聚合根的 id - 我不想引用这个聚合,只有 id。是否可以通过休眠强制执行外键? (我使用休眠自动模式生成)。

EG

@Entity
Person {
    ...        
}
@Entity
Event {
    @Id
    private long eventId;

    @ForeignKey(references Person.id)
    private long personId;

    // I don't want to map it as @ManyToOne Person
}

我不想使用@ManyToOne,因为我不想在事件聚合中存储对其他聚合的引用。这将是 DDD 反模式。

【问题讨论】:

  • 你能解释一下为什么你不想使用@ManyToOne吗?

标签: hibernate jpa orm domain-driven-design many-to-one


【解决方案1】:

您可以使用@Column 中的columnDefinition 来添加约束。

@Column(columnDefintion="bigint references Person(id)")
private long personId;

请注意,您需要为约束使用特定于数据库的 SQL 类型和语法。

【讨论】:

    【解决方案2】:

    您可以尝试使用importing script file

    4.1。导入脚本文件

    要自定义模式生成过程,hibernate.hbm2ddl.import_files 配置属性必须用于提供其他脚本文件,以便在启动 SessionFactory 时 Hibernate 可以使用。

    <property name="hibernate.hbm2ddl.import_files" value="schema-generation.sql" />

    在模式自动生成后,Hibernate 将执行脚本文件。

    【讨论】:

      猜你喜欢
      • 2011-03-20
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 2019-12-14
      • 2014-07-25
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      相关资源
      最近更新 更多