动态排序NamedQuery?缝/休眠/ JPA

Sha*_*man 7 sorting hibernate seam jpa

我已NamedQuery定义了几个,并且我希望能够动态地为一个实体的字段排序,而不必为NamedQuery我想要排序的每个字段创建唯一的.例如:

我有一个名为MyObject的实体,字段为'a','b'和'c'.我的基本查询是" SELECT DISTINCT o FROM MyObject o",但我希望能够ORDER BY在我的查询中添加一个子句.理想情况下,我可以做一些像命名参数,我的查询看起来像:

SELECT DISTINCT o FROM MyObject o ORDER BY :order
Run Code Online (Sandbox Code Playgroud)

然后我会指定要排序的字段(a,b,c).有没有办法用Seam/Hibernate/JPA来实现这个目的?是否有更好的策略来解决这个问题?

Nay*_*kar 5

命名查询无法在运行时更改.

// -----编辑部分

public void getOrders(String orderByElement){

    String query = "SELECT DISTINCT o FROM MyObject o ORDER BY " + orderByElement;

    entityManager.createQuery(query).getResultList();
}
Run Code Online (Sandbox Code Playgroud)

它的JPA具体.

  • 从侧面说明:如果您在网站中使用此解决方案,则使用简单的SQL注入很容易入侵.对于动态Hibernate查询afaik没有其他解决方案,所以这是正确的解决方案,但添加一个方法来检查它是否是一个有效的参数并拒绝包含'select'或其他可疑SQL语句的字符串... (2认同)