7

我碰巧找到了使用这种结构的例子,但我不确定我能从中得到什么?

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

@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();
    }

我能从中得到什么?

谢谢。

4

1 回答 1

7

你得到的是:

  1. 告诉您的方法不需要事务的相对正式的方式(例如,您知道它不会在 EntityManager 中调用持久化、合并或删除)。
  2. 在某些情况下 可能的性能优化。
    • 无需创建/传递交易。根据Java EE 5 教程:“由于事务涉及开销,此属性可能会提高性能。”
    • 根据其他来源(例如 Pro JPA 2),它提供了根本不创建托管实体的实现可能性(这可能比立即创建分离实体更繁重的操作)。
于 2012-05-29T18:13:20.487 回答