Bisakah saya menggunakan Hibernate Session Factory yang dideklarasikan dalam Konteks DispatcherServlet alih-alih hibernate.cfg.xml?

Dalam proyek Spring MVC saya sebelumnya, saya telah menggunakan Hibernate sebagai penyedia JPA. Saya tidak perlu membuat file hibernate.cfg.xml karena saya telah mendeklarasikan Hibernate Session Factory di file Konteks Spring DispatcherServlet saya dan saya telah mendeklarasikan file persistence.xml.

Dalam proyek baru saya, saya pada dasarnya ingin menggunakan Hibernate. Saya telah membuat kelas entitas dari struktur database saya. Namun di IDEA DAO kelas belum dibuat, mengapa? Bisakah saya menghasilkan kelas DAO di IDEA? Dan selama membuat POJO ini, kelas entitas yang saya buat juga Hibernate Session Factory di file Konteks DispatcherSerlvet.

Saya telah membuat kelas DAO sederhana saya sendiri untuk memeriksa kelas yang ada di database. Namun kesalahan ini telah terjadi:

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

Jadi saya berasumsi saya harus membuat hibernate.cfg.xml. Dan jika ya, apakah saya harus menyimpan deklarasi Hibernate Session Factory di file Konteks DispatcherServlet saya?

EDIT

<!-- 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>

EDIT #2

Saya telah memindahkan kelas beranotasi dan definisi koneksi ke file hibernate.cfg.xml. Saya telah menghapus definisi pabrik sesi dan juga definisi Transaction Manager dari file konfigurasi pegas. Dan objek sederhana saya yang bertahan di database saya berfungsi dengan baik. Jadi mungkin ini cara terpendek untuk bekerja dengan Spring MVC dan Hibernate? Tapi bagaimana dengan Transaction Manager? Apakah ini diperlukan oleh operasi atau tindakan lain?


person woyaru    schedule 05.09.2012    source sumber


Jawaban (1)


Saya tidak perlu membuat file hibernate.cfg.xml karena saya telah mendeklarasikan Hibernate Session Factory di file Konteks Spring DispatcherServlet saya dan saya telah mendeklarasikan file persistence.xml.

AFAIK saat menggunakan JPA kita perlu mendefinisikan entityManagerFactory di file konfigurasi Spring dan implementasi JPA ditentukan oleh properti jpaVendorAdapter. persistence.xml digunakan untuk mendefinisikan unit persistensi. hibernate.cfg.xml tidak diperlukan dengan JPA.

Dalam proyek baru saya, saya pada dasarnya ingin menggunakan Hibernate.

Jika Anda ingin menggunakan hibernasi secara langsung, Anda perlu mendefinisikan pabrik sesi baik di file konfigurasi pegas atau di file hibernate.cfg.xml seperti

<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>

Anda mencampuradukkan konfigurasi JPA dan Hibernate.
Tautan berikut mungkin membantu Anda menghindari kebingungan
Musim Semi + Hibernasi
Musim semi + JPA (dengan implementasi Hibernate)


EDIT: Gunakan AnnotationSessionFactoryBean saat Anda menggunakan anotasi untuk menentukan pemetaan

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
person Ajinkya    schedule 05.09.2012
comment
Terimakasih untuk jawaban. Menurut penggunaan Hibernate secara langsung: Saya telah mendefinisikan pabrik sesi di file konfigurasi pegas tetapi saya mendapatkan kesalahan bahwa hibernate.cfg.xml tidak ditemukan. Jadi saya mungkin tidak bisa mendefinisikan pabrik sesi baik di file konfigurasi pegas ATAU di file hibernate.cfg.xml. - person woyaru; 05.09.2012
comment
@woyaru: Anda dapat mendefinisikan sessionFactory di file konfigurasi. Saya telah menambahkan sampel untuk hal yang sama. Periksa apakah Anda telah mendefinisikan sessionFactory dengan benar. Mungkin beberapa properti hilang dan itulah mengapa spring mencari hibernate.cfg.xml - person Ajinkya; 05.09.2012
comment
Di pabrik sesi saya, saya telah mendefinisikan properti yang sama seperti yang telah Anda tetapkan dalam contoh. Pada contoh dari link juga terdapat properti configLocation tetapi di dalamnya terdapat hibernate.cfg.xml. Saya telah menambahkan ke pertanyaan saya definisi saya tentang pabrik sesi. - person woyaru; 05.09.2012
comment
@woyaru: Saya pikir Anda harus menggunakan AnnotationSessionFactoryBean daripada LocalSessionFactoryBean. Saya telah memperbarui jawaban saya. - person Ajinkya; 05.09.2012
comment
Ketika saya mengganti LocalSessionFactoryBean dengan AnnotationSessionFactoryBean saya mendapatkan kesalahan yang sama seperti di sini: stackoverflow.com/a/8566420/845220 AnnotationSessionFactoryBean adalah bagian dari Hibernate 3. Saya ingin menggunakan Hibernate 4. - person woyaru; 05.09.2012