簡體   English   中英

Spring / JPA / Hibernate持久化實體:沒有任何事情發生

[英]Spring/JPA/Hibernate persist entity : Nothing happen

我正在嘗試用Spring 3,JPA 2和Hibernate 3創建一個應用程序。當y持久化實體時我有一個問題:什么都沒發生! 數據未插入數據庫中,也不執行查詢。 但是,當我使用query.getResultList()之類的請求時,select正常工作。

所以我認為我的問題只出現在持續/更新和事務管理器上,但我對spring並不是很好。 你能幫我嗎 ?

這是我的配置文件:

我的applicationContext.xml

    <jee:jndi-lookup id="soireeentreamis_DS" jndi-name="jdbc/soireeentreamis" />

    <bean id="persistenceUnitManager"
        class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
        <property name="persistenceXmlLocations">
            <list>
                <value>classpath*:META-INF/persistence.xml</value>
            </list>
        </property>
        <property name="defaultDataSource" ref="soireeentreamis_DS" />
        <property name="dataSources">
            <map>
                <entry key="soireeentreamisDS" value-ref="soireeentreamis_DS" />
            </map>
        </property>
    </bean>

    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceUnitManager" ref="persistenceUnitManager" />
        <property name="persistenceUnitName" value="soireeentreamisPU" />
        <property name="jpaDialect">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
        </property>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="showSql" value="false" />
            </bean>
        </property>
    </bean>

    <bean id="soireeentreamisTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
        <property name="jpaDialect">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
        </property>
    </bean>

    <tx:annotation-driven transaction-manager="soireeentreamisTransactionManager" />

    <context:annotation-config />
</beans>

我的persistence.xml

    <persistence-unit name="soireeentreamisPU"
        transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <non-jta-data-source>soireeentreamisDS</non-jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
            <property name="hibernate.hbm2ddl.auto" value="create"/>
        </properties>
    </persistence-unit>

我的服務

 @Service @Transactional("soireeentreamisTransactionManager") public class UserServiceImpl implements UserService ... 

我的道

 @Repository public class UserDaoImpl extends GenericDaoImpl<User, String> implements UserDao { @PersistenceContext(unitName = "soireeentreamisPU") private EntityManager em; public void persist(final User entity) { em.persist(entity); } } 

有人可以幫幫我嗎?

我剛才發現類似的問題。 在我的情況下,我需要在我的dispacher-servlet.xml中添加以下行。 所以我需要在2個地方(applicationContex.xml和dispacher-servlet.xml)

<tx:annotation-driven />

為了清除某些內容,你沒有顯示你的服務方法“存儲”對象,但我相信它是用@Transactional注釋的 - 因為沒有你要創建的新事務。

這最近發生在我身上。 問題是當你說一個事務性問題時,將@Transactional注釋添加到更新數據庫的所有方法。 然后將CGLIB庫添加到您的calsspath中,或者如果您使用的是Maven,則將其添加到pom.xml中,這對於spring make transactions來說是必需的。 即使我以不同的方式做到這一點,我希望它可以幫助你。 這是我的db.xml,其中包含所有與數據庫相關的spring配置。

<!-- Scans within the base package of the application for @Components to configure as beans -->

<context:property-placeholder location="classpath:db.properties"/>

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="true" />
            <property name="generateDdl" value="true" />
            <property name="databasePlatform" value="${db.dialect}" />
        </bean>
    </property>
</bean>

<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"
    destroy-method="close">
    <property name="driverClass" value="${db.driver}" />
    <property name="jdbcUrl" value="${db.url}" />
    <property name="username" value="${db.username}" />
    <property name="password" value="${db.password}" />
    <property name="idleConnectionTestPeriodInMinutes" value="1" />
    <property name="idleMaxAgeInMinutes" value="4" />
    <property name="maxConnectionsPerPartition" value="30" />
    <property name="minConnectionsPerPartition" value="10" />
    <property name="partitionCount" value="3" />
    <property name="acquireIncrement" value="5" />
    <property name="statementsCacheSize" value="100" />
    <property name="releaseHelperThreads" value="3" />
</bean>

<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
    <property name="jpaDialect" ref="jpaDialect"/>
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

<bean
    class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

這是我的persistence.xml

<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="pu-app" transaction-type="RESOURCE_LOCAL">


</persistence-unit>

您需要將模型對象添加到persistence.xml文件中。 在提供者元素下方添加

<class>com.your.domain.object.User</class>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM