Java 冬眠不';t为@ManyToOne创建外键约束

Java 冬眠不';t为@ManyToOne创建外键约束,java,hibernate,many-to-one,Java,Hibernate,Many To One,我有Hibernate映射类,其中许多注释有时会导致数据库中的外键约束(我尝试了Oracle和H2),有时则不会 例如,此处不为源\ u id生成任何约束: @Entity @Table( name = "onto_entry" ) @Inheritance ( strategy = InheritanceType.SINGLE_TABLE ) @DiscriminatorColumn ( name = "term_category" ) @DiscriminatorValue ( "gener

我有Hibernate映射类,其中许多注释有时会导致数据库中的外键约束(我尝试了Oracle和H2),有时则不会

例如,此处不为源\ u 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 ()
  ...
}
当我在这里为协议_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 ()
  ...
}

我做错什么了吗?哪些因素会影响这种行为?

我会回答自己


。所以我决定自己做,通过查看JPA注释来实现部分自动化。这是我到目前为止所做的。

可能是hibernate.dia方言设置为MyISAM而不是InnoDB

MyISAM不支持外键

这么定

hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
还是弹簧靴

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect

你是如何定义关系的另一面的(两种情况下)?Ben,没有另一面,在这种情况下,我不在乎从父母到孩子,因为这很少需要,可以通过SQL/HQL完成。请阅读我的自我回答。它是Oracle,显然,对于Oracle和其他DBMS,约束和索引仅在创建模式下创建,而不是在更新模式时创建。幸运的是,这些天我不怎么使用Hibernate。