私はこれを理解しようと1時間を無駄にしたので、ここに文書化する。MySQLを使用すると、なぜHibernate/JPAが私のために外部キー制約を作成しないのですか?
私は、エンティティはFooを持っている: - > bar.id
@ManyToOne(optional = false)
@JoinColumn(name = "barId")
private Bar bar;
はなぜfoo.barに外部キー制約を作成しませんHibernateは?
私はこれを理解しようと1時間を無駄にしたので、ここに文書化する。MySQLを使用すると、なぜHibernate/JPAが私のために外部キー制約を作成しないのですか?
私は、エンティティはFooを持っている: - > bar.id
@ManyToOne(optional = false)
@JoinColumn(name = "barId")
private Bar bar;
はなぜfoo.barに外部キー制約を作成しませんHibernateは?
これは、MySQLがENGINE = MyISAMで作成したテーブルの外部キー制約をサポートしていないためです。 ENGINE = InnoDBで(両方の)表を作成する必要があります。あなたはmy.cnf
を微調整し、デフォルトを追加することで、またはあなたのJDBC URLに特殊変数を使用して行うことができます。
jdbc:mysql://localhost/dbname?characterEncoding=utf8&sessionVariables=storage_engine=InnoDB
を示唆したように、ここでHibernate: Create Mysql InnoDB tables instead of MyISAMをあなたも
org.hibernate.dialect.MySQL5InnoDBDialect
を使用するように
Hibernateの方言を変更することができます
これは侵襲性が低い。
代替ソリューションとしてこれを追加したかっただけです。
JPAを使用してスキーマを作成していますが、上記はどこに配置されていますか? persistance.xmlには? –
これはhibernate.propertiesファイルに入ります – konqi
FWIW、MySQL 5.5では、InnoDBはデフォルトではデフォルトのストレージエンジンです。 –