java - 尝试在 Hibernate 中保存多条记录时出错

标签 java mysql hibernate

当我尝试在我的数据库中保存多条记录时,我会先用这个函数验证是否存在这样一条记录。

public boolean hasNotaFiscal(Pojo pojo) {

    String sql = "SELECT nota_fiscal.numero, nota_fiscal.tipo_emissao, d.cnpj, e.cnpj FROM nota_fiscal";
    sql = sql.concat(" INNER JOIN destinatario ON (nota_fiscal.destinatario_id = destinatario.id)");
    sql = sql.concat(" INNER JOIN emitente ON (nota_fiscal.emitente_id = emitente.id)");
    sql = sql.concat(" INNER JOIN dados_empresa e ON (e.id = emitente.dados_empresa_id)");
    sql = sql.concat(" INNER JOIN dados_empresa d ON (d.id = destinatario.dados_empresa_id)");
    sql = sql.concat(" WHERE e.cnpj = :cnpjEmitente AND d.cnpj = :cnpjDestinatario AND numero = :numero AND tipo_emissao = :tipoEmissao");

    SQLQuery query = (SQLQuery) this.createSQLQuery(sql);

    query.addEntity(NotaFiscal.class);

    query.setParameter("cnpjDestinatario", pojo.getDestinatario().getDadosEmpresa().getCnpj());
    query.setParameter("cnpjEmitente", pojo.getEmitente().getDadosEmpresa().getCnpj());
    query.setParameter("numero", pojo.getNumero());
    query.setParameter("tipoEmissao", pojo.getTipoEmissao().getIndex());

    return query.list().size() > 0;
}

但是在第 16 条记录中我收到了这个错误...

Nov 28, 2013 5:39:39 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 0, SQLState: S0022
Nov 28, 2013 5:39:39 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Column 'id' not found.

我发现有人告诉我要设置标量方法,但我没有用。

我在 Java 中使用 mysql 5 和 hibernate

最佳答案

在我用谷歌搜索了很多东西之后。

我找到了解决办法,就是去掉实体类,但是我需要重命名字段cnpj

所以代码看起来像这样。

@Override
public boolean hasNotaFiscal(Pojo pojo) {

    String sql = "SELECT nota_fiscal.numero, nota_fiscal.tipo_emissao, d.cnpj as cnpjDestinatario, e.cnpj as cnpjEmitente FROM nota_fiscal";
    sql = sql.concat(" INNER JOIN destinatario ON (nota_fiscal.destinatario_id = destinatario.id)");
    sql = sql.concat(" INNER JOIN emitente ON (nota_fiscal.emitente_id = emitente.id)");
    sql = sql.concat(" INNER JOIN dados_empresa e ON (e.id = emitente.dados_empresa_id)");
    sql = sql.concat(" INNER JOIN dados_empresa d ON (d.id = destinatario.dados_empresa_id)");
    sql = sql.concat(" WHERE e.cnpj = :cnpjEmitente AND d.cnpj = :cnpjDestinatario AND numero = :numero AND tipo_emissao = :tipoEmissao");

    SQLQuery query = (SQLQuery) this.createSQLQuery(sql);

    query.setParameter("cnpjDestinatario", pojo.getDestinatario().getDadosEmpresa().getCnpj());
    query.setParameter("cnpjEmitente", pojo.getEmitente().getDadosEmpresa().getCnpj());
    query.setParameter("numero", pojo.getNumero());
    query.setParameter("tipoEmissao", pojo.getTipoEmissao().getIndex());

    return query.list().size() > 0;
}

关于java - 尝试在 Hibernate 中保存多条记录时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20273768/

相关文章:

java - Eclipse 自动填充一些无效标签

mysql - 在SQL中更改PK,由于FK而不起作用

java - 我无法使用 JSR303 @Valid 显示错误消息

java - 使用 where 子句在 hibernate 中选择查询

带有泛型的 Java 反射方法调用

java - 无法使用 java 从 MySQL 数据库 longblob 列获取 zip 文件

java - 调整高 BufferedImage 大小时如何保持/偏爱某些像素值?

MySQL,如何获取行之间的时间差

mysql - 如果我将表用于只读,是否可以对查询中使用的每一列建立索引?

java - spring + jpa + hibernate,列出表中的所有行