0
I have a method that retrieves all paths from the appendices of a ledger, so the appendices can be printed. They are listed in a p:datatable within a dialog, but when opening the screen so that I can press the button that opens the dialog this happens:
org.postgresql.util.PSQLException: ERROR: operator does not exist: bigint = bytea
Dica: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Posição: 208
Method to recover attachments
public List<ArquivoRelato> recuperarTodosOsAnexosDoLivro() {
List<ArquivoRelato> todosArquivosRelato = new ArrayList<ArquivoRelato>();
Map<String, Object> params = new HashMap<String, Object>();
String queryArquivo = "SELECT arel.idArquivoRelato, arel.caminhoarquivo, arel.caminhoverarquivo, arel.descricao "
+ "FROM ArquivoRelato arel "
+ "WHERE (arel.relato_idrelato IN (SELECT idrelato FROM relato r WHERE r.livro_idlivro = :idLivro)) "
+ "OR (arel.retificacaorelato_idretificacaorelato IN (SELECT idretificacaorelato FROM retificacaorelato rr "
+ "WHERE rr.relato_idrelato IN (SELECT idrelato FROM relato r WHERE r.livro_idlivro = :idLivro)))";
params.put("idLivro", livroSelecionado.getIdLivro());
List<Object[]> objects = objectDao.listPesqQuery(queryArquivo, params);
for (Object[] o : objects) {
ArquivoRelato arquivoRelatoTemp = new ArquivoRelato();
BigInteger id = (BigInteger) o[0];
arquivoRelatoTemp.setIdArquivoRelato(id.longValue());
arquivoRelatoTemp.setCaminhoArquivo((String) o[1]);
arquivoRelatoTemp.setCaminhoVerArquivo((String) o[2]);
arquivoRelatoTemp.setDescricao((String) o[3]);
String nomeArquivo = arquivoRelatoTemp.getCaminhoVerArquivo();
arquivoRelatoTemp.setNomeArquivo(nomeArquivo.substring(arquivoRelatoTemp.getCaminhoVerArquivo().lastIndexOf("/") + 1));
todosArquivosRelato.add(arquivoRelatoTemp);
}
return todosArquivosRelato;
}
View where attachments are displayed
<p:dialog widgetVar="listaAnexosDialog" style="display: none">
<p:scrollPanel mode="native" style="border: none;">
<h:outputText value="Escolha os arquivos a serem anexados. Caso não escolha nenhum, o Livro de Ordem será impresso sem anexos"
style="color: #f00; font-weight: bold;"/>
<br />
<br />
<p:dataTable var="itemTodosAnexos" lazy="true" rowKey="#{itemTodosAnexos.idArquivoRelato}"
selection="#{livroController.arquivosRelatoSelecionados}"
value="#{livroController.recuperarTodosOsAnexosDoLivro()}"
emptyMessage="Esse livro não possui anexos"
rendered="#{not empty livroController.recuperarTodosOsAnexosDoLivro()}">
<p:column selectionMode="multiple"/>
<p:column headerText="Descrição">
<h:outputText value="#{not empty itemTodosAnexos.descricao ? itemTodosAnexos.descricao : 'Sem descrição'}"/>
</p:column>
<p:column headerText="Nome do Arquivo">
<h:outputText value="#{itemTodosAnexos.nomeArquivo}"/>
</p:column>
</p:dataTable>
<br />
<p:commandButton value="Imprimir" icon="impressao" ajax="false"
actionListener="#{livroController.imprimirLivro()}"/>
</p:scrollPanel>
</p:dialog>
Book Entity
@Entity
public class Livro implements Serializable {
private static final long serialVersionUID = 1L;
private Long idLivro;
private Art art;
private Date dataCriacao;
private Date dataRealInicioObraServico;
private boolean encerrado;
private List<Relato> relatos = new ArrayList<Relato>();
private Date dataEncerramento;
public Livro() {
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getIdLivro() {
return idLivro;
}
public void setIdLivro(Long idLivro) {
this.idLivro = idLivro;
}
@OneToOne
public Art getArt() {
return art;
}
public void setArt(Art art) {
this.art = art;
}
@Temporal(TemporalType.TIMESTAMP)
public Date getDataCriacao() {
return dataCriacao;
}
public void setDataCriacao(Date dataCriacao) {
this.dataCriacao = dataCriacao;
}
@Temporal(TemporalType.DATE)
public Date getDataRealInicioObraServico() {
return dataRealInicioObraServico;
}
public void setDataRealInicioObraServico(Date dataRealInicioObraServico) {
this.dataRealInicioObraServico = dataRealInicioObraServico;
}
public boolean isEncerrado() {
return encerrado;
}
public void setEncerrado(boolean encerrado) {
this.encerrado = encerrado;
}
@OneToMany(mappedBy="livro")
public List<Relato> getRelatos() {
return relatos;
}
public void setRelatos(List<Relato> relatos) {
this.relatos = relatos;
}
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
public Date getDataEncerramento() {
return dataEncerramento;
}
public void setDataEncerramento(Date dataEncerramento) {
this.dataEncerramento = dataEncerramento;
}
}
Entidade Arquivorelato
@Entity
public class ArquivoRelato implements Serializable {
private static final long serialVersionUID = 1L;
private Long idArquivoRelato;
private String caminhoArquivo;
private String nomeArquivo;
private String caminhoVerArquivo;
private String descricao;
private Relato relato;
private RetificacaoRelato retificacaoRelato;
public ArquivoRelato() {
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getIdArquivoRelato() {
return idArquivoRelato;
}
public void setIdArquivoRelato(Long idArquivoRelato) {
this.idArquivoRelato = idArquivoRelato;
}
public String getCaminhoArquivo() {
return caminhoArquivo;
}
public void setCaminhoArquivo(String caminhoArquivo) {
this.caminhoArquivo = caminhoArquivo;
}
@Transient
public String getNomeArquivo() {
return nomeArquivo;
}
public void setNomeArquivo(String nomeArquivo) {
this.nomeArquivo = nomeArquivo;
}
public String getCaminhoVerArquivo() {
return caminhoVerArquivo;
}
public void setCaminhoVerArquivo(String caminhoVerArquivo) {
this.caminhoVerArquivo = caminhoVerArquivo;
}
@Lob
@Type(type = "org.hibernate.type.StringClobType")
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
@ManyToOne(cascade = {CascadeType.ALL})
public Relato getRelato() {
return relato;
}
public void setRelato(Relato relato) {
this.relato = relato;
}
@ManyToOne
public RetificacaoRelato getRetificacaoRelato() {
return retificacaoRelato;
}
public void setRetificacaoRelato(RetificacaoRelato retificacaoRelato) {
this.retificacaoRelato = retificacaoRelato;
}
}
The error indicated by the exception shows that there is a comparison between two values of different types. Take a look at position 208 of your query. It is in this position that there is a comparison between two different types.
– rafaelim
Good morning, probably the parameter of your query is going null.
params.put("idLivro", livroSelecionado.getIdLivro());
– Johnatan Dantas