Java Spring/JPA/Hibernate持久化实体:什么都没有发生
我正在尝试用Spring3、JPA2和Hibernate3制作一个应用程序。 当你坚持一个实体时,我遇到了一个问题:什么都没有发生!数据不会插入数据库,也不会执行查询。 但是当我使用像query.getResultList()这样的请求时,select可以正常工作 因此,我认为我的问题只存在于持久化/更新和事务管理器上,但我对spring不是很在行。 你能帮我吗 以下是我的配置文件: My applicationContext.xml 我的刀Java Spring/JPA/Hibernate持久化实体:什么都没有发生,java,spring,hibernate,jpa-2.0,Java,Spring,Hibernate,Jpa 2.0,我正在尝试用Spring3、JPA2和Hibernate3制作一个应用程序。 当你坚持一个实体时,我遇到了一个问题:什么都没有发生!数据不会插入数据库,也不会执行查询。 但是当我使用像query.getResultList()这样的请求时,select可以正常工作 因此,我认为我的问题只存在于持久化/更新和事务管理器上,但我对spring不是很在行。 你能帮我吗 以下是我的配置文件: My applicationContext.xml 我的刀 @存储库 公共类UserDaoImpl扩展了Gene
@存储库
公共类UserDaoImpl扩展了GenericDaoImpl实现
UserDao{
@PersistenceContext(unitName=“soireentreamispu”)
私人实体管理者;
public void persist(最终用户实体){
em.persist(实体);
}
}
有人能帮我吗?您需要将模型对象添加到persistence.xml文件中。在provider元素add的正下方
<class>com.your.domain.object.User</class>
com.your.domain.object.User
这件事最近发生在我身上。问题是,正如您所说的事务性问题,将@transactional注释添加到所有更新DB的方法中。然后将该库添加到calsspath中,或者将其添加到pom.xml中。如果您使用的是Maven,这对于spring make事务是必需的。即使我用另一种方式做了,我希望它能帮助你。这是我的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>
我不久前发现了类似的问题。在我的例子中,我需要在dispacher-servlet.xml中添加下面的行。所以我在两个地方需要它(applicationContex.xml和dispacher servlet.xml)
为了澄清一些问题,您没有向服务方法显示“存储”对象,但我相信它是用@Transactional注释的-因为您不想创建新的事务。我觉得这是事务问题,也许可以尝试在方法上添加@Transactional。谢谢您的回复。我试图在UserServiceImpl中将@transactional添加到我的createUser方法中,但我遇到了相同的问题:(我做到了,但我也遇到了相同的问题。我不知道它是否有帮助,但是,当y持久化时,它会调用SharedEntityManagerCreator.SharedEntityManagerInvoke(…)这个方法“EntityManager target=EntityManager FactoryUtils.doGetTransactionalEntityManager(this.targetFactory,this.properties)”返回null…感谢您的帮助。我尝试了您的解决方案,但遇到了相同的问题:(我的pom.xmlYes中有cglib 2.2.2!这是解决方案!我不明白它为什么有效,但对我来说没关系。谢谢你的帮助!看看这篇文章的答案,这将有助于理解它为什么有效。)
@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);
}
}
<class>com.your.domain.object.User</class>
<!-- 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 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>
<tx:annotation-driven />