Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JTA中查找没有事务的工作_Java_Jpa_Jta - Fatal编程技术网

Java 在JTA中查找没有事务的工作

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(){

我正在学习JTA,并尝试制作一个查找示例来测试我的概念:

首先,a创建了一个类,其中CDI注入了我的DAO:

@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(),否则不会持久化对实体的任何更改。