Jpa/Hibernate 映射没有关系的外键

Jpa/Hibernate map foreign key without relationship

在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 反模式。

您可以尝试使用importing script file

4.1. Importing script files

To customize the schema generation process, the hibernate.hbm2ddl.import_files configuration property must be used to provide other scripts files that Hibernate can use when the SessionFactory is started.

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

Hibernate is going to execute the script file after the schema is automatically generated.

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

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

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