Java 在JTA中查找没有事务的工作
我正在学习JTA,并尝试制作一个查找示例来测试我的概念: 首先,a创建了一个类,其中CDI注入了我的DAO:Java 在JTA中查找没有事务的工作,java,jpa,jta,Java,Jpa,Jta,我正在学习JTA,并尝试制作一个查找示例来测试我的概念: 首先,a创建了一个类,其中CDI注入了我的DAO: @Named @RequestScoped public class SegurancaServiceJTA { @Inject private DAOSeguranca daoSeguranca; @Transactional(value = Transactional.TxType.NEVER) public void findTest(){
@Named
@RequestScoped
public class SegurancaServiceJTA {
@Inject
private DAOSeguranca daoSeguranca;
@Transactional(value = Transactional.TxType.NEVER)
public void findTest(){
List result = daoSeguranca.findList("SELECT u FROM Usuario u",null);
}
}
在我的DAO中,我正在使用@PersistenceContext注释输入我的EntityManager
public class DAOSeguranca implements IDAO, Serializable {
@PersistenceContext(unitName = "seguranca")
private EntityManager em;
@SuppressWarnings({"unchecked", "rawtypes"})
public List findList(String hql, Map<String, Object> namedParams, Integer first,
Integer maxResult, Class qualifier, boolean buscarTodos) {
try {
logger.debug("Executando findList. HQL = " + hql);
Query query = em.createQuery(hql);
configureParams(namedParams, query);
if (first != null) {
query.setFirstResult(first);
}
if (maxResult != null) {
query.setMaxResults(maxResult);
} else if (!buscarTodos) {
query.setMaxResults(100);
}
return query.getResultList();
} catch (Exception e) {
logger.error(e);
throw new DAOException(e.getMessage());
}
}
}
公共类DAOSeguranca实现IDAO,可序列化{
@PersistenceContext(unitName=“seguranca”)
私人实体管理者;
@SuppressWarnings({“unchecked”,“rawtypes”})
公共列表findList(字符串hql,映射名参数,整数优先,
整数maxResult、类限定符、布尔值(DOS){
试一试{
logger.debug(“executado findList.HQL=“+HQL”);
Query Query=em.createQuery(hql);
配置参数(名称参数、查询);
如果(第一个!=null){
query.setFirstResult(第一个);
}
如果(maxResult!=null){
query.setMaxResults(maxResult);
}如果(!buscarTodos){
query.setMaxResults(100);
}
返回query.getResultList();
}捕获(例外e){
错误(e);
抛出新的异常(如getMessage());
}
}
}
我的疑问是:
1) 我理解这种方法不应该起作用,因为entityManager可以在没有事务的情况下找到任何东西,并且我正在使用TxType.NEVER强制执行错误。但是此方法正常工作并返回bean
2) 在persistence.xml中,我使用的是JTA,但如果我将资源放在本地,一切都会继续工作。那么,这是对的?我知道JTA应该只与persistence.xml中的JTA一起工作,而不是与RESOURCE_LOCAL一起工作。可以添加DAO定义,并且该方法可以实现。我已经把它放进去了。你能添加@Transactional(value=Transactional.TxType.NEVER)的包吗?这也是基于EJB还是基于Spring的后端?我使用的是打包的:import javax.transaction.Transactional。我没有使用EJB或SPring,只使用CDI+JTA1.2+Jboss EAP 7一次问两个问题是不好的,这会使问题变得过于宽泛。Re:您的第一个问题是,不需要运行事务来获取数据。其效果是,获取的所有实体都会立即分离,这意味着无法加载延迟加载的属性,并且除非调用merge(),否则不会持久化对实体的任何更改。