Java Hibernte EntityManager不';不坚持
我读过类似的帖子,但我似乎不知道我的问题出在哪里,所以如果有任何帮助,我将不胜感激 我有一个实体对象Java Hibernte EntityManager不';不坚持,java,spring,hibernate,Java,Spring,Hibernate,我读过类似的帖子,但我似乎不知道我的问题出在哪里,所以如果有任何帮助,我将不胜感激 我有一个实体对象Xyz 这是我的刀课: @Repository public class XyzDAO { @PersistenceContext(name = "MyEntityManager") private EntityManager em; @Transactional public void create(Xyz xyz) { em.persist(x
Xyz
这是我的刀课:
@Repository
public class XyzDAO {
@PersistenceContext(name = "MyEntityManager")
private EntityManager em;
@Transactional
public void create(Xyz xyz) {
em.persist(xyz);
}
public void setEntityManager(final EntityManager em) {
this.em = em;
}
}
persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="MyEntityManager" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>.....Xyz</class>
<properties>
<property name="hibernate.dialect" value="${hibernate.dialect}" />
<property name="hibernate.connection.driver_class" value="${hibernate.connection.driver_class}" />
<property name="hibernate.connection.url" value="${hibernate.connection.url}" />
<property name="hibernate.connection.username" value="${hibernate.connection.username}" />
<property name="hibernate.connection.password" value="${hibernate.connection.password}" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" .....>
<persistence-unit name="MyEntityManager" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/datasource/VAP_XA</jta-data-source>
<class>.....Xyz</class>
.....
</persistence-unit>
</persistence>
org.hibernate.ejb.HibernatePersistence
…Xyz
xyz-config.xml:
<beans .....>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="XyzDAO" class=".....XyzDAO"></bean>
</beans>
从DB中读取Xyz可以很好地工作,但是如果我尝试持久化Xyz,它会运行而不会出错,但不会将任何内容保存到DB中,因此我的假设是没有创建事务。如果我执行em.getTransaction().begin()
操作,则会给出不允许在共享EntityManager上创建事务的消息-请改用Spring事务或EJB CMT
错误。如果我执行em.flush()
,则表示没有事务。所以我一定是做错了什么,但似乎不知道到底是什么。
是从实体管理器工厂获得的对象。 您应该将持久性单元MyEntityManager注入到EntityManager
对象引用中,并使用它获取EntityManager工厂
的实例EntityManager
@PersistenceUnit(unitName = "MyEntityManager") private EntityManagerFactory entityManagerFactory; ..... @Transactional public void create(Xyz xyz) { EntityManager entityManager = entityManagerFactory.createEntityManager(); entityManager.persist(xyz); } .....
也请检查。好的,我不确定回答我自己的问题是否是个好主意,但基本上,由于某种原因,RESOURCE\u LOCAL无法工作,因此我不得不切换到JTA。所以,持久性现在可以工作了,文件如下所示: 道: persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="MyEntityManager" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>.....Xyz</class>
<properties>
<property name="hibernate.dialect" value="${hibernate.dialect}" />
<property name="hibernate.connection.driver_class" value="${hibernate.connection.driver_class}" />
<property name="hibernate.connection.url" value="${hibernate.connection.url}" />
<property name="hibernate.connection.username" value="${hibernate.connection.username}" />
<property name="hibernate.connection.password" value="${hibernate.connection.password}" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" .....>
<persistence-unit name="MyEntityManager" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/datasource/VAP_XA</jta-data-source>
<class>.....Xyz</class>
.....
</persistence-unit>
</persistence>
org.hibernate.ejb.HibernatePersistence
jdbc/datasource/VAP_XA
…Xyz
.....
不对config.xml进行任何更改。希望这对任何人都有帮助,谢谢你的回答。我在下面遇到了类似的问题,配置帮助我用entitymanager解决了持久化和删除问题 对于删除,请在下面的行中添加:
entityManager.remove(entityManager.contains(user) ? user : entityManager.merge(user));
您是自己管理事务还是通过Spring管理事务,您是否使用注释
@Transactional
,您是如何创建/插入事务管理器的transaction@ankur-singhal我在上面遗漏了什么?你试过我的建议了吗?我也有同样的问题,下面的帖子和下面的配置帮助我解决了持久化和删除问题。