简体   繁体   English

尝试在Hibernate中保存多个记录时出错

[英]Error when trying to save multiples records in Hibernate

When I try to save multiples records in my database I verify before if exist one record like that with this function. 当我尝试在数据库中保存多个记录时,请使用此功能先验证是否存在一条类似的记录。

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

But in the 16 record I´m getting this error... 但是在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.

I found someome telling to set scallar method but didn´t works with me. 我发现有人告诉我设置标量方法,但不适用于我。

I´m using mysql 5 and hibernate in Java . 我正在使用mysql 5并在Java hibernate

after i searching a lot of things in google. 在Google搜索了很多东西之后。

I found the solution, it was to take off the entity class but I need to rename the field cnpj . 我找到了解决方案,那就是取消entity class但是我需要重命名字段cnpj

So the code look like this. 所以代码看起来像这样。

@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;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM