43

私は休止状態の注釈を使用しています。

すべてのモデル クラスで、次のように注釈を付けます。

@Entity
@Table
public class SomeModelClass {
//
}

私のhibernate.cfg.xmlは

<hibernate-configuration>
   <session-factory>
      <!-- some properties -->

      <mapping package="com.fooPackage" />
      <mapping class="com.fooPackage.SomeModelClass" />
    </session-factory>
</hibernate-configuration>

com.fooPackage に追加するクラスごとに、次のように hibernate.cfg.xml に行を追加する必要があります。

<mapping class="com.fooPackage.AnotherModelClass" />

新しいモデル クラスを追加する方法はありますが、この行を hibernate.cfg.xml に追加する必要はありませんか?

4

6 に答える 6

11

スレッドネクロマンシーのビット...

あなたが望むことをする良い方法があるようには見えません。Spring を使用したくない場合は、Reflectionsを使用した同様の方法を次に示します。

// Create your SessionFactory with mappings for every `Entity` in a specific package
Configuration configuration = new Configuration();
configuration.configure("your_hibernate.cfg.xml");

Reflections reflections = new Reflections("your_package");

Set<Class<?>> classes = reflections.getTypesAnnotatedWith(javax.persistence.Entity.class);

for(Class<?> clazz : classes)
{
    configuration.addAnnotatedClass(clazz);
}

ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);

同じアプローチは、おそらく他の Java リフレクション ライブラリにも適用できます。

于 2014-10-14T03:03:30.310 に答える
11

私はこの問題に出くわしましたが、これにはすぐに使える解決策があるようです。私の統合はまだ出ていません。後で更新します。

Javadoc から、特に次のpackagesToScan部分:

org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean

マッピング用の JDK 1.5+ アノテーション メタデータをサポートする、Hibernate 用の Spring の標準 LocalSessionFactoryBean のサブクラス。

注: このクラスには、Java Persistence API と Hibernate Annotations アドオンが存在する Hibernate 3.2 以降が必要です。

AnnotationSessionFactoryBeanBean 定義の例:

<bean id="sessionFactory" 
      class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
  <property name="dataSource" ref="dataSource"/>
  <property name="annotatedClasses">
    <list>
      <value>test.package.Foo</value>
      <value>test.package.Bar</value>
    </list>
  </property>
</bean>

または、エンティティ クラスの自動検出にクラスパス スキャンを使用する場合:

<bean id="sessionFactory"
      class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
  <property name="dataSource" ref="dataSource"/>
  <property name="packagesToScan" value="test.package"/>
</bean>

導入されたバージョン: 1.2.2
作成者: Juergen Hoeller

于 2011-08-09T07:50:12.073 に答える