让我们描述以下用例:我有一个JPQL查询,它使用new关键字即时创建数据对象。在SELECT子句中,我想注入一个属性,该属性对于数据库来说是未知的,但对于查询它的层来说却是未知的。

这看起来像

EntityManager em; // Got it from somewhere
boolean editable = false; // Value might change, e.g. depending on current date

Query q = em.createQuery("SELECT new foo.bar.MyDTO(o, :editable) FROM MyObject o")
            .setParameter("editable", editable);

List<MyDTO> results = (List<MyDTO>) q.getResultList();


有什么想法可以将这种属性或参数注入SELECT子句在JPQL中起作用? JPA和JPA 2.0解决方案均适用。

编辑:性能不是关键因素,而是代码的清晰度和简洁性。

最佳答案

如果没有可能的供应商扩展,它将无法工作,因为根据规范:


  4.6.4输入参数
  ...
  输入参数只能在
  查询的WHERE子句或HAVING子句。

09-05 09:40
查看更多