当我尝试在我的数据库中保存多个记录时,我在之前验证是否存在一个类似于此功能的记录。
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.
我发现有人告诉我设置scallar方法但不适合我。
我在mysql
中使用hibernate
5和Java
。
答案 0 :(得分:0)
在谷歌搜索了很多东西之后。
我找到了解决方案,就是取消entity class
,但我需要重命名字段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;
}