1

パッケージレベルの注釈を作成し、すべてのエンティティで注釈を定義する必要がないように、休止状態で package-info.java ファイルをスキャンしようとしています。それを行う方法について言及したこの投稿を見つけました:

Hibernate が package-info.java を無視するのはなぜですか?

答えはこれを追加すると言います:

<mapping package="com.foo.bar.thepackage">

私の休止状態の設定ファイルに。ただし、注釈のみを使用し、LocalContainerEntityManagerFactoryBean を使用しているため、Hibernate XML ファイルはありません。jpa ファクトリを使用して、この hibernate 固有のプロパティを設定するにはどうすればよいですか?

ありがとう

4

3 に答える 3

0

LocalContainerEntityManager には、 というメソッドがありsetPackagesToScanます。この方法を試してください。

 LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
  factoryBean.setPackagesToScan("com.foo.bar.thepackage"); 
于 2013-09-19T08:18:04.023 に答える
0

Hibernate 4.3.1 と Spring 4.0.2 で同じ問題が発生しました。

私の回避策は、JPA 構成アノテーションを package-info.java からクラスの 1 つに移動することでした。

DefaultPersistenceUnitManager#entityTypeFilters次の JPA アノテーションを持つフィルター クラスのみに初期化されるため、これは機能しないようです。

    entityTypeFilters = new LinkedHashSet<TypeFilter>(4);
    entityTypeFilters.add(new AnnotationTypeFilter(Entity.class, false));
    entityTypeFilters.add(new AnnotationTypeFilter(Embeddable.class, false));
    entityTypeFilters.add(new AnnotationTypeFilter(MappedSuperclass.class, false));
    try {
        @SuppressWarnings("unchecked")
        Class<? extends Annotation> converterAnnotation = (Class<? extends Annotation>)
                DefaultPersistenceUnitManager.class.getClassLoader().loadClass("javax.persistence.Converter");
        entityTypeFilters.add(new AnnotationTypeFilter(converterAnnotation, false));
    }
    catch (ClassNotFoundException ex) {
        // JPA 2.1 API not available
    }
于 2014-03-17T03:35:34.217 に答える
0

LocalContainerEntityManagerFactoryBean とほぼ空の persistence.xml の両方を使用し、永続化ユニットに LocalContainerEntityManagerFactoryBean と同じ名前を使用するだけです。

META-INF/persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
         xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

    <persistence-unit name="sameAsInLocalContainerEntityManagerFactoryBean" transaction-type="RESOURCE_LOCAL">
    <!-- This is your package-info -->     
    <class>com.foo.bar.thepackage</class>        
    </persistence-unit> 
</persistence>
于 2014-03-27T12:03:59.967 に答える