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 约束类型和语法。
在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 theSessionFactory
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 约束类型和语法。