gpt4 book ai didi

spring - JTATransactionManager 未提交到数据库

转载 作者:行者123 更新时间:2023-12-02 02:24:57 26 4
gpt4 key购买 nike

我将使用数据库和 JMS 队列,因此我决定使用 JTATransactionManager(多个资源)。
我正在使用 Spring Framework 3.2.3.RELEASE
Hibernate 4.2.1.Final
Glassfish 3.1.2.2

使用 JTATransactionManager 时,不会向数据库提交任何内容。我尝试了 JPATransactionManager,它工作正常。我使用 JTATransactionManager 没有遇到任何异常。知道我做错了什么吗?谢谢。

这是一段jpa配置文件

<jee:jndi-lookup id="dataSource" jndi-name="Test" />

<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:packagesToScan="com.pinkshield.jpaTest.domain"
p:dataSource-ref="dataSource"
p:jpaPropertyMap-ref="jpaPropertyMap"
p:jpaVendorAdapter-ref="hibernateVendor" />


<util:map id="jpaPropertyMap">
<entry key="hibernate.hbm2ddl.auto" value="validate" />
<entry key="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
<entry key="transaction.factory_class" value="org.hibernate.transaction.JTATransactionFactory" />
<entry key="transaction.manager_lookup_class"
value="org.hibernate.transaction.SunONETransactionManagerLookup" />
</util:map>

<bean id="hibernateVendor"
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
p:showSql="true" />

<tx:jta-transaction-manager />

<context:component-scan base-package="com.pinkshield.jpaTest" />

这是我的 JPA 通用 Dao

package com.pinkshield.jpaTest;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

public class GenericDaoJpa<T> implements GenericDao<T>
{

private Class<T> queryClass;
protected EntityManager entityManager;

@PersistenceContext
public void setEntityManager(EntityManager entityManager)
{
this.entityManager = entityManager;
}

public GenericDaoJpa(Class<T> queryClass)
{
super();
this.queryClass = queryClass;
}

public T getNewInstance()
{
try
{
return getQueryClass().newInstance();
}
catch (InstantiationException e)
{
throw new RuntimeException("Error creating new instance of : " + getQueryClass().getName(), e);
}
catch (IllegalAccessException e)
{
throw new RuntimeException("Error creating new instance of : " + getQueryClass().getName(), e);
}
}

public Class<T> getQueryClass()
{
return queryClass;
}

public T get(Long id)
{
if (id == null)
{
return null;
}
else
{
return entityManager.find(queryClass, id);
}
}

@SuppressWarnings("unchecked")
public List<T> getAll()
{
return entityManager.createQuery("select o from " + queryClass.getName() + " o").getResultList();
}

public void save(T object)
{
entityManager.persist(object);
}

public void update(T object)
{
entityManager.merge(object);
}

public void delete(T object)
{
entityManager.remove(entityManager.merge(object));
}

}

这是 UserDao

@Repository
public class UserDao extends GenericDaoJpa<User>
{
public UserDao()
{
super(User.class);
}
}

这是我的服务代码

 @Service
public class UserServiceImpl implements IUserService{

@Autowired UserDao userDao;

@Override
@Transactional
public void saveUser(String name, String lastName)
{
User user=new User();
user.setLastName(lastName);
user.setName(name);

userDao.save(user);
}
}

最佳答案

我认为你需要添加<tx:annotation-driven/>到上下文 xml。这将运行一个上下文后处理器,它将使用 @Transactional 包装方法。使用 AOP 方法拦截器来提供您正在寻找的事务行为。

关于spring - JTATransactionManager 未提交到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16839649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com