2

エンティティは、テーブル 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");ますか?

4

0 に答える 0