设置此TransactionAttributeType.NOT_SUPPORTED可以获得什么

时间:2012-05-29 09:10:40

标签: ejb-3.0 jpa-2.0

我碰巧找到了使用这个结构的例子,虽然我不确定从中可以得到什么?

这是否意味着无状态EJB中的所有select语句都应该遵循这个?

@Stateless
public class EmployeeFacade {
    @PersistenceContext(unitName="EmployeeService")
    EntityManager em;

    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
    public List<Department> findAllEmployees() {
        return em.createQuery("SELECT e FROM Employee e",
        Employee.class)
        .getResultList();
    }

我从中获得了什么?

感谢。

1 个答案:

答案 0 :(得分:7)

你得到的是:

  1. 相对正式的方式告诉您的方法不需要事务(因此您知道它不会在EntityManager中调用persist,merge或remove)。
  2. 在某些情况下可能的性能优化。
    • 无需创建/传递交易。根据{{​​3}}:“由于交易涉及开销,因此该属性可能会提高性能。”
    • 根据其他来源(例如Pro JPA 2),它提供了完全不创建托管实体的实现(这可能比立即创建分离实体更重要)。