如何使用来自另一个对象的数据创建休眠查询?

时间:2018-07-03 15:34:34

标签: spring hibernate

我需要创建一个Spring @Formula批注,该批注用来自用户对象的用户ID {user.getId()}填充PROPOSAL.USER_ID。

@Formula("SELECT COUNT(*) FROM PROPOSAL WHERE PROPOSAL.USER_ID = userId")
int numberOfProposals;

如果我使用...则不起作用

@Transient
private Long userId;

尽管它具有其getter和setter:

public User getUser() {
    return user;
}

public Proposal user(User user) {
    this.user = user;
    return this;
}

public void setUser(User user) {
    this.user = user;
}

public Long getUserId() {
    return this.user.getId();
}

如果我使用它就行不通了

@Formula("SELECT COUNT(*) FROM PROPOSAL WHERE PROPOSAL.USER_ID = ?#{this.user.id}")

或者:

@Formula("SELECT COUNT(*) FROM PROPOSAL WHERE PROPOSAL.USER_ID = ?#{this.user.getId()}")

如果有任何文档显示如何操作,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

基本上不可能,因为您标记为@Transient的成员在数据库级别不可访问。 @Formula批注中的语句仅在数据库级别运行。

所以它们是不同级别的一部分,您不能互相使用。

您可以做的是创建一个自定义查询,并将userId传递给该查询,以填充实体类。