Jpa find查询是否在JTA事务中返回托管实体或分离实体?
在下面的类中,两个方法都返回相同的对象 但是,由于第一个返回的对象列表是事务的一部分,而第二个返回的对象列表不是事务的一部分,所以它是被管理的吗Jpa find查询是否在JTA事务中返回托管实体或分离实体?,jpa,ejb,jta,transactional,Jpa,Ejb,Jta,Transactional,在下面的类中,两个方法都返回相同的对象 但是,由于第一个返回的对象列表是事务的一部分,而第二个返回的对象列表不是事务的一部分,所以它是被管理的吗 public class QueryServiceImpl implements QueryService { @PersistenceContext(unitName="PC") EntityManager em; //default attribute @TransactionAttribute(Transact
public class QueryServiceImpl implements QueryService {
@PersistenceContext(unitName="PC")
EntityManager em;
//default attribute
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public List findAlItems() {
return em.createQuery("SELECT item FROM Item item",
Item.class)
.getResultList();
}
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public List findAlItemsNoTransaction() {
return em.createQuery("SELECT item FROM Item item",
Item.class)
.getResultList();
}
关于你的例子,你是对的。从第二个方法(FinDaliteSnoTransaction)返回后,不应管理所有实体。但是,如果您希望对其进行管理,则应使用:
@PersistenceContext(type=EXTENDED)
正如JPA规范中所示:
/*
* An extended transaction context is used. The entities remain
* managed in the persistence context across multiple transactions.
*/
@Stateful
@Transaction(REQUIRES_NEW)
public class ShoppingCartImpl implements ShoppingCart {
@PersistenceContext(type=EXTENDED)
EntityManager em;
private Order order;
private Product product;
public void initOrder(Long id) {
order = em.find(Order.class, id);
}
public void initProduct(String name) {
product = (Product) em.createQuery("select p from Product p
where p.name = :name")
.setParameter("name", name)
.getSingleResult();
}
public LineItem createLineItem(int quantity) {
LineItem li = new LineItem(order, product, quantity);
order.getLineItems().add(li);
em.persist(li);
return li;
}
}