【问题标题】:HQL Hibernate many tablesHQL Hibernate 许多表
【发布时间】:2014-09-30 11:43:56
【问题描述】:

我是休眠新手,我正在尝试从 4 个表中列出一个列表, 但它不起作用。

public List<DocumentoAssinanteTO> listAssinanteSemImagemByDocument(DocumentoTO documento, UsuarioDepartamentoTO ud) {
    StringBuilder hql = new StringBuilder();
    hql.append(" SELECT DA.id, ");
    hql.append(" DOC.id,");
    hql.append(" UD.id, ");
    hql.append(" D.id, ");
    hql.append(" U.id, ");
    hql.append(" U.nome,");
    hql.append(" FROM ").append(DocumentoAssinanteTO.class.getName()).append(" DA ");
    hql.append(" INNER JOIN DA.documento DOC ");
    hql.append(" INNER JOIN DA.usuarioDepartamento UD ");
    hql.append(" INNER JOIN UD.usuario              U");
    hql.append(" INNER JOIN UD.departamento         D");
    hql.append(" WHERE DOC = :idDocumento AND UD = :idUserDep ");
    hql.append(" AND U.assinatura IS NULL ");


    Query query = queryTransform(hql.toString());
    query.setLong("idDocumento", documento.getId());
    query.setLong("idUserDep", ud.getId());

    return query.list();
}

可能是 JOIN 部分,不知道我应该使用 INNER、LEFT 还是只使用 JOIN

我想创建一个像这样的sql的hql

 SELECT docass.id_documento_assinante,doc.id,
        docass.id_user_depto,u.id,u.nome
FROM DCF_DOCUMENTO_ASSINANTE as docass
JOIN DCF_CONTENT as doc ON doc.id = docass.id_documento
JOIN DCF_USUARIO_DEPARTAMENTO as userDep ON userDep.id = docass.id_user_depto
JOIN DCF_USUARIOS as u  ON u.id = userDep.id_usuario
WHERE u.id_anexo_assinatura is null

【问题讨论】:

  • 因为它不是本机查询,您是否首先在本机形式的 sql 服务器中尝试过它以查看它是否正在运行?因为 joins + hql 我以前遇到过麻烦
  • 您的DOC 可能是一个对象,您将其与long 进行比较。发布您收到的错误。

标签: java hibernate hql


【解决方案1】:

首先你的问题还没有完全解决,先在这里定义你的数据库模型,从你的查询中我知道了

 hql.append(" DOC.id, "); 

这里不会添加最后一个昏迷 hql.append("DOC.id");

这里

hql.append(" FROM ").append(DocumentoAssinanteTO.class.getName()).append(" DA ");

你不需要通过调用 class.getname() 方法来获取类的名称,你只需在这里调用 bean 或 Model 的名称。

你的内部连接有很多问题。

【讨论】:

  • 此外,如果您使用 JPA 或 Hibernate 提供架构和模型名称的结构,我会发现对您有帮助
【解决方案2】:

好的,我搞定了,做了一些调整

公开列表列表AssinanteSemImagemByDocument(DocumentoTO documento) { StringBuilder hql = new StringBuilder(); hql.append("选择 DA.id,"); hql.append("DOC.id,"); hql.append("UD.id,"); hql.append("U.id,"); hql.append("U.nome"); hql.append("FROM").append(DocumentoAssinanteTO.class.getName()).append("DA"); hql.append("加入 DA.documento DOC"); hql.append("加入 DA.usuarioDepartamento UD"); hql.append("加入 UD.usuario U"); hql.append("WHERE DOC = :idDocumento"); hql.append("AND U.assinatura 为 NULL");

    Query query = queryTransform(hql.toString());
    query.setLong("idDocumento", documento.getId());

    return query.list();

}

真正的问题是最后一个逗号。呵呵

hql.append("U.nome,");

【讨论】:

    猜你喜欢
    • 2011-09-14
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 2010-11-18
    • 2012-04-22
    • 2016-06-24
    • 2013-08-25
    • 2016-11-23
    相关资源
    最近更新 更多