我想使用 JPA 2.0 标准 api 来构建带有子选择的 order by 子句。我知道你可以用普通的 SQL 来做到这一点,但它可以用标准 api 映射吗?有人可以给一个代码示例吗?
例子:
Order(name, address) // table1
OrderPriority(address, priority) // table2 priority by address
select o from Order o order by (select p.priority from OrderPriority p where
p.address = o.address)
Run Code Online (Sandbox Code Playgroud) 我将一个工作(postgre)sql查询翻译成jpql,但是hibernate抛出一个
org.hibernate.hql.ast.QuerySyntaxException:意外的AST节点异常
这些是我的核心模型类:
@Entity
public class Piece {
@Id
@GeneratedValue
public Long id;
@ManyToOne
public AUser user;
public long index;
...
}
@Entity
public class Vote {
@Id
@GeneratedValue
public Long id;
@ManyToOne
public AUser receiver;
...
}
@Entity
public class AUser {
@Id
@GeneratedValue
public Long id;
@OneToMany(mappedBy="receiver", cascade=CascadeType.ALL)
public List<Vote> receivedVotes;
...
}
Run Code Online (Sandbox Code Playgroud)
这是我的jpql查询:
String query = "select p from Piece p order by (select count(v.receiver) from Vote v where v.receiver.id=p.user.id) desc, p.index";
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释异常,它为什么会发生以及如何更改查询以避免它.谢谢!