【发布时间】:2026-01-26 04:05:01
【问题描述】:
我有 Hibernate 映射的类,其中 ManyToOne 注释有时会导致数据库中的外键约束(我已经尝试过 Oracle 和 H2),有时不会。
例如这里没有为source_id生成约束:
@Entity
@Table( name = "onto_entry" )
@Inheritance ( strategy = InheritanceType.SINGLE_TABLE )
@DiscriminatorColumn ( name = "term_category" )
@DiscriminatorValue ( "generic" )
@SequenceGenerator( name = "hibernate_seq", sequenceName = "onto_entry_seq" )
public class OntologyEntry extends Identifiable
{
...
@ManyToOne ( targetEntity = ReferenceSource.class, cascade = {
CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH } )
@JoinColumn( name = "source_id" )
public ReferenceSource getSource ()
...
}
虽然我在这里得到了为 protocol_id 生成的 FK 约束:
@Entity
@Table ( name = "protocol_application" )
public class ProtocolApplication extends Identifiable
{
@ManyToOne ( cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, targetEntity = Protocol.class )
@JoinColumn ( name = "protocol_id" )
public Protocol getProtocol ()
...
}
我做错了吗?哪些因素会影响这种行为?
【问题讨论】:
-
你是如何定义关系的另一端的(对于这两种情况)?
-
本,没有另一面,我不关心在这种情况下从父级到子级,因为它很少需要,可以通过 SQL/HQL 完成。
标签: java hibernate many-to-one