3

以前の Spring MVC プロジェクトでは、Hibernate を JPA のプロバイダーとして使用しました。hibernate.cfg.xmlSpring DispatcherServlet Context ファイルで Hibernate Session Factory を宣言し、ファイルを宣言したため、ファイルを作成する必要はありませんでしたpersistence.xml

私の新しいプロジェクトでは、基本的に Hibernate を使用したいと考えています。データベース構造からエンティティ クラスを生成しました。しかし、IDEA DAO クラスが生成されていないのはなぜですか? IDEA で何らかの方法で DAO クラスを生成できますか? そして、この POJO の生成中に、DispatcherSerlvet コンテキスト ファイルで Hibernate Session Factory も作成したエンティティ クラスを作成しました。

データベース内の永続化クラスをチェックするために、独自の単純な DAO クラスを作成しました。しかし、このエラーが発生しました:

Error in creating SessionFactory object./hibernate.cfg.xml not found

だから私は作成しなければならないと思っていますhibernate.cfg.xml。はいの場合、DispatcherServlet Context ファイルに Hibernate Session Factory 宣言を保持する必要がありますか?

編集

<!-- Hibernate session factory -->
<beans:bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

    <beans:property name="dataSource">
        <beans:ref bean="dataSource" />
    </beans:property>

    <beans:property name="hibernateProperties">
        <beans:props>
            <beans:prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</beans:prop>
            <beans:prop key="hibernate.show_sql">true</beans:prop>
            <beans:prop key="hibernate.hbm2ddl.auto">update</beans:prop>
            <beans:prop key="hibernate.connection.url">jdbc:mysql://localhost/finances</beans:prop>
            <beans:prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</beans:prop>
            <beans:prop key="hibernate.connection.username">root</beans:prop>
            <beans:prop key="hibernate.connection.password">root</beans:prop>
        </beans:props>
    </beans:property>

    <beans:property name="annotatedClasses">
        <beans:list>
            <beans:value>my.package.FirstClass</beans:value>
            <beans:value>my.package.SecondClass</beans:value>
        </beans:list>
    </beans:property>
</beans:bean>
<!-- Hibernate session factory end -->

<beans:bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <beans:property name="sessionFactory" ref="sessionFactory" />
</beans:bean>

編集#2

注釈付きクラスと接続定義をhibernate.cfg.xmlファイルに移動しました。Transaction Managerセッション ファクトリの定義と、Spring 構成ファイルからの定義も削除しました。そして、データベース内の単純な永続オブジェクトは正しく機能します。おそらく、これが Spring MVC と Hibernate を操作する最短の方法でしょうか? しかし、どうTransaction Managerですか?これは、別の操作またはアクションで必要ですか?

4

1 に答える 1

4

Spring DispatcherServlet Context ファイルで Hibernate Session Factory を宣言し、persistence.xml ファイルを宣言したため、hibernate.cfg.xml ファイルを作成する必要はありませんでした。

JPAを使用している間、知る限りentityManagerFactory、Spring構成ファイルで定義する必要があり、JPAの実装はjpaVendorAdapterプロパティによって決定されます。persistence.xml永続ユニットを定義するために使用されます。hibernate.cfg.xmlJPA では必要ありません。

私の新しいプロジェクトでは、基本的に Hibernate を使用したいと考えています。

hibernate を直接使用する場合は、Spring 構成ファイルまたは hibernate.cfg.xml ファイルでセッション ファクトリを次のように定義する必要があります。

<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.
    annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="myDataSource" />
        <property name="annotatedClasses">
            <list>
                <value>com.foo.Bar</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect"> org.hibernate.dialect.HSQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">create</prop>
            </props>
        </property>
    </bean>

JPA と Hibernate の構成を混同しています。
リンクをたどると、混乱を避けるのに役立つかもしれません
Spring + Hibernate
Spring + JPA (Hibernate 実装あり)


EDIT:AnnotationSessionFactoryBeanマッピングを定義するために注釈を 使用しているように使用してください

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
于 2012-09-05T10:44:48.153 に答える