2014-09-30 75 views
0

我是新来的休眠,我试图从4个表中列出一个列表, ,但它不起作用。HQL休眠很多表

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(); 
} 

也许是连接的一部分,不知道我是否应该使用INNER,LEFT或刚刚加入

我想创建一个HQL这样的SQL

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 
+0

joins explored:http://stackoverflow.com/questions/5706437/whats-the-difference-between-inner-join-left-join-right-join-and-full-join – dinesh707 2014-09-30 11:45:12

+0

因为它不是本机查询你有没有尝试过它在一个本地形式的SQL服务器首先看它是否运行?导致加入+ hql我以前遇到过麻烦 – AntJavaDev 2014-09-30 11:46:47

+0

你的'DOC'可能是一个对象,你将它与长时间比较。发布您收到的错误。 – 2014-09-30 11:54:01

回答

0

好吧,我得到它的工作,取得了一定的调整

公开名单listAssinanteSemImagemByDocument(DocumentoTO这份执行){ StringBuilder的HQL =新的StringBuilder(); hql.append(“SELECT 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(“JOIN DA.documento DOC”); hql.append(“JOIN DA.usuarioDepartamento UD”); hql.append(“JOIN UD.usuario U”); hql.append(“WHERE DOC =:idDocumento”); hql.append(“AND U.assinatura IS NULL”);

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

    return query.list(); 

} 

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

hql.append(“U.nome,”);

0

首先,您的问题没有完全清除,首先在这里定义您的数据库模型,并从您的查询我已经知道,

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

最后的昏迷不会在这里添加 hql.append(“DOC.id”);

这里

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

你不需要通过调用你只需要调用此型号的豆或名称class.getname()方法来获取类的名字。

并且在内部联接中存在很多问题。

+0

此外,如果您在使用JPA或Hibernate时为您提供架构和模型名称的结构,我将很乐意为您提供帮助 – 2014-09-30 12:23:20