エンティティは、テーブル ID ジェネレーター戦略を使用します。
@Id
@TableGenerator(name = "id_gen",
table = "id_gen",
pkColumnName = "gen_name",
valueColumnName = "gen_val",
pkColumnValue = "shared_id_generator", /*same as generator name by default*/
initialValue = 10, /*0 by default*/
allocationSize = 100 /*50 by default*/)
@GeneratedValue(strategy = GenerationType.TABLE, generator = "id_gen")
private long id;
すべてのエンティティが同じ戦略と同じジェネレーターを使用するため、テーブル ジェネレーターの定義を jpa-mapping xml ファイルに移動しました。Maven プロジェクト内の場所:
main/resources/db/jpa/orm.xml
ジェネレーターは現在、jpa-mapping xml ファイルで次のように定義されています。
<table-generator name="id_shared_generator"
table="id_gen"
pk-column-name="gen_name"
pk-column-value="shared_id_value"
value-column-name="gen_val"
initial-value="10"
allocation-size="100" />
現在、エンティティには次の id フィールドがあります。
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "id_shared_generator")
private long id;
persistence.xml ファイルはまったく使用せず、代わりに entityManagerFactory を構成します。
@Bean
@DependsOn("liquibase")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
LocalContainerEntityManagerFactoryBean emfb = new LocalContainerEntityManagerFactoryBean();
emfb.setDataSource(dataSource);
// emfb.setPersistenceXmlLocation("classpath:META-INF/persistence.xml");
emfb.setPackagesToScan(new String[]{"com.savdev.springmvcexample.domain"});
emfb.setMappingResources("db/jpa/orm.xml");
emfb.setJpaVendorAdapter(jpaVendorAdapter());
emfb.setJpaProperties( new Properties(){{
put("hibernate.hbm2ddl.auto", "validate");
put("hibernate.format_sql", "true");
put("hibernate.show_sql", "true");
}});
emfb.setPersistenceUnitName("springmvcexample");
return emfb;
}
Spring アプリケーション コンテキストを読み込もうとすると、次の例外が発生します。
原因: org.springframework.beans.factory.BeanCreationException: クラスパス リソース [spring/repository-config.xml] で定義された名前 'entityManagerFactory' の Bean の作成中にエラーが発生しました: init メソッドの呼び出しに失敗しました。ネストされた例外は javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build EntityManagerFactory ... 原因: org.hibernate.AnnotationException: Unknown Id.generator: id_shared_generator
教えてください、私は何が間違っていますか?呼び出しを介して追加の jpa マッピング xml ファイルを設定することはできemfb.setMappingResources("db/jpa/orm.xml");
ますか?