让我们描述以下用例:我有一个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子句。