【问题标题】:Converting MySQL Query to HQL将 MySQL 查询转换为 HQL
【发布时间】:2020-08-23 10:47:49
【问题描述】:

我有这个查询(它适用于 MySQL):

Select * 
from atividade a, 
lateralidade l, 
movimento m, 
parteCorpo p, 
registroatividade r,
consulta c, 
paciente pa  
where 
    l.id_lateralidade = a.id_lateralidade 
    AND l.descricao = '?'  
    AND m.id_movimento = a.id_movimento 
    AND m.descricao = '?' 
    AND m.parteCorpo_id_parteCorpo = p.id_parteCorpo 
    AND p.descricao = '?' 
    AND r.id_atividade = a.id_atividade 
    AND a.id_planoAtividade = c.id_consulta 
    AND pa.id_paciente = c.id_paciente 
    AND pa.nome = '?'; 

我想将其转换为 HQL。到目前为止,我有这个:

public List<RegistroAtividade> list_regs(Atividade atividade, Paciente paciente){
Query query = this.session.createQuery("from Atividade a, Lateralidade l, Movimento m, ParteCorpo p, RegistroAtividade r,Consulta c, Paciente pa where l.id_lateralidade = a.id_lateralidade AND l.descricao = :lateralidadedesc AND m.id_movimento = a.id_movimento AND m.descricao = :movimentodesc AND m.parteCorpo_id_parteCorpo = p.id_parteCorpo AND p.descricao = :partecorpodesc AND r.id_atividade = a.id_atividade AND a.id_planoAtividade = c.id_consulta AND pa.id_paciente = c.id_paciente AND pa.nome = :pacientenome");
        query.setParameter("lateralidadedesc", atividade.getLateralidade().getDescricao());
        query.setParameter("movimentodesc", atividade.getMovimento().getDescricao());
        query.setParameter("partecorpodesc", atividade.getMovimento().getParteCorpo().getDescricao());
        query.setParameter("partecorpodesc", paciente.getNome());
        return query.list();
} 

但我不断收到此错误:

org.hibernate.QueryException:无法解析属性:id_lateralidade 的:br.com.acelerometro.entity.Atividade [从 br.com.acelerometro.entity 中选择 a、l、n、p、r、c、pa。 Atividade AS a, br.com.acelerometro.entity.Lateralidade AS l, br.com.acelerometro.entity.Movimento AS m, br.com.acelerometro.entity.ParteCorpo AS p, br.com.acelerometro.entity.RegistroAtividade AS r,br.com.acelerometro.entity.Consulta AS c, br.com.acelerometro.entity.Paciente AS pa 其中 l.id_lateralidade = a.id_lateralidade AND l.descricao = :lateralidadedesc AND m.id_movimento = a.id_movimento AND m .descricao = :movimentodesc AND m.parteCorpo_id_parteCorpo = p.id_parteCorpo AND p.descricao = :partecorpodesc AND r.id_atividade = a.id_atividade AND a.id_planoAtividade = c.id_consulta AND pa.id_paciente = c.id_paciente AND pa.nome = :基因组]```

【问题讨论】:

  • 必须使用正确的 HQL 语法重写连接。
  • 你能帮我重写这些连接吗?
  • 您是否有充分的理由将干净、易读且高效的查询转换为抽象形式比真实数据库更好的数据库?
  • 如果您有其他解决方案而不是将此查询转换为 hql,我会很高兴看到它 =)
  • @GordanBobic Hibernate 不是“中间件”,这不是 OP 使用它的原因。

标签: mysql sql hibernate hql


【解决方案1】:

如果您使用 HQL,那么您必须使用实体类中定义的此 id_lateralidade 的关联属性。

根据实体中的定义使用 idLateralidade 例如:

public class Atividade  {

    // Field..............

     @Column(name="id_lateralidade")
     public Integer idLateralidade  

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 2013-07-02
    • 2014-06-26
    • 1970-01-01
    • 2017-12-11
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多