Hibernate:@Formula 查询字段使用另一个@Formula 字段
Hibernate: @Formula query field using another @Formula field
我希望字段 idEmpresa
成为在 WHERE
语句中使用 idDepartamento
(这是另一个 @Formula 字段)的 @Formula 字段。
@Entity
public class CfgUsuario {
//More fields
private String idDepartamento;
private String idEmpresa;
@Formula("(SELECT ud.IdDepartamento FROM UsuarioDpto ud WHERE ud.PorDefecto = 'S' AND ud.IdUsuario = idUsuario)")
public String getIdDepartamento() {
return idDepartamento;
}
public void setIdDepartamento(String idDepartamento) {
this.idDepartamento = idDepartamento;
}
@Formula("(SELECT d.IdEmpresa FROM Departamento d WHERE d.IdDepartamento = idDepartamento)")
public String getIdEmpresa() {
return idEmpresa;
}
public void setIdEmpresa(String idEmpresa) {
this.idEmpresa = idEmpresa;
}
}
但我得到:
javax.persistence.PersistenceException:
org.hibernate.exception.SQLGrammarException: Column name 'idDepartamento' invalid.
您似乎正在尝试创建一个有效的 HQL / JPQL 语句,但是如果您阅读 [=11 的 JavaDoc =] 你会看到:
The formula has to be a valid SQL fragment
因此您不能引用 class 中的 任何 字段,只能引用数据库中的表和列。
但您可以将 Formula
更改为使用 JOIN
:
@Formula("(SELECT ud.IdDepartamento FROM UsuarioDpto ud WHERE ud.PorDefecto = 'S' AND ud.IdUsuario = idUsuario)")
public String getIdDepartamento() {
return idDepartamento;
}
@Formula("(SELECT d.IdEmpresa FROM Departamento d JOIN UsuarioDpto ud ON d.IdDepartamento = uid.idDepartamento WHERE ud.PorDefecto = 'S' AND ud.IdUsuario = idUsuario)")
public String getIdEmpresa() {
return idEmpresa;
}
我会删除您公式的 setter,因为它们会使您的 API 的任何用户感到困惑。公式字段通常是只读的。
我希望字段 idEmpresa
成为在 WHERE
语句中使用 idDepartamento
(这是另一个 @Formula 字段)的 @Formula 字段。
@Entity
public class CfgUsuario {
//More fields
private String idDepartamento;
private String idEmpresa;
@Formula("(SELECT ud.IdDepartamento FROM UsuarioDpto ud WHERE ud.PorDefecto = 'S' AND ud.IdUsuario = idUsuario)")
public String getIdDepartamento() {
return idDepartamento;
}
public void setIdDepartamento(String idDepartamento) {
this.idDepartamento = idDepartamento;
}
@Formula("(SELECT d.IdEmpresa FROM Departamento d WHERE d.IdDepartamento = idDepartamento)")
public String getIdEmpresa() {
return idEmpresa;
}
public void setIdEmpresa(String idEmpresa) {
this.idEmpresa = idEmpresa;
}
}
但我得到:
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: Column name 'idDepartamento' invalid.
您似乎正在尝试创建一个有效的 HQL / JPQL 语句,但是如果您阅读 [=11 的 JavaDoc =] 你会看到:
The formula has to be a valid SQL fragment
因此您不能引用 class 中的 任何 字段,只能引用数据库中的表和列。
但您可以将 Formula
更改为使用 JOIN
:
@Formula("(SELECT ud.IdDepartamento FROM UsuarioDpto ud WHERE ud.PorDefecto = 'S' AND ud.IdUsuario = idUsuario)")
public String getIdDepartamento() {
return idDepartamento;
}
@Formula("(SELECT d.IdEmpresa FROM Departamento d JOIN UsuarioDpto ud ON d.IdDepartamento = uid.idDepartamento WHERE ud.PorDefecto = 'S' AND ud.IdUsuario = idUsuario)")
public String getIdEmpresa() {
return idEmpresa;
}
我会删除您公式的 setter,因为它们会使您的 API 的任何用户感到困惑。公式字段通常是只读的。