执行 JPA 查询的 CDI Bean

CDI Bean with executing JPA queries

简短的问题,如果在 javaEE(wildfly,cdi)中执行 jpa 查询(仅选择),javaEE(wildfly,cdi)中的 bean/instance 应该是 @RequestScoped 还是我应该始终对 jpa 使用 @stateless?

我不明白问题的重点。

如果您有业务层并且有可能使用 EJB,我会选择 @Stateless 保持业务逻辑和 JPA 交互,并向客户端公开特定的业务接口。

无论如何,如果你只是做一个 select 而没有别的,也许是为了在前端填充你的数据表,我建议像这样注释你的业务方法:

@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public List<MyEntity> findByWhateverCriteria(String param) {
  // business logic
}

为什么?因为可以节省应用服务器资源。

另一方面,如果出于与上述相同的原因,您只需要在前端显示数据而无需理会,则 @RequestScoped 是合适的。