I am stuck in this for half a day. My question may be scary with the image and JSon but my problem is not that difficult. I think I included all the information need for one to help. I have the following query
select id, preco, 'casas-venda' as link, descricao, dir, slug from casa_venda union select id, preco, 'apartamentos-vendas' as link, descricao, dir, slug from apartamento_venda union select id, preco, 'loft-vendas' as link, descricao, dir, slug from loft_venda union select id, preco, 'studio-vendas' as link, descricao, dir, slug from studio_venda union select id, preco, 'quitinete-venda' as link, descricao, dir, slug from quitinete_venda
This query when run throught PgAdmin 4 returns this
But the JSon that I receive is this
I forgot to tell how I noticed the JSon is wrong. I should have a “link” with “studio-venda” and “link” with “loft-venda”.
[{"id":5,"preco":190000,"descricao":"Apartamento bem confortável","link":"apartamentos-vendas","slug":"casa-venda-4-dormitorios-Franca-São Paulo","dir":"29","imagemPrincipal":"https://img.exemplo.com.br/images/07/07592902iiiiii8267077.jpg","miniaturasImagens":["casa-venda-4-dormitorios-franca-sao-paulo_5.jpg","casa-venda-4-dormitorios-franca-sao-paulo_4.jpg","casa-venda-4-dormitorios-franca-sao-paulo_1.jpg","temp.jpg","casa-venda-4-dormitorios-franca-sao-paulo_3.jpg","casa-venda-4-dormitorios-franca-sao-paulo_7.jpg","casa-venda-4-dormitorios-franca-sao-paulo_2.jpg","casa-venda-4-dormitorios-franca-sao-paulo_6.jpg"]},{"id":10,"preco":667000,"descricao":"Apartamento muito bonito","link":"apartamentos-vendas","slug":"casa-venda-1-dormitorios-Franca-São Paulo","dir":"33","imagemPrincipal":"https://img.exemplo.com.br/images/07/07592902iiiiii8267077.jpg","miniaturasImagens":["casa-venda-1-dormitorios-franca-sao-paulo_6.jpg","casa-venda-1-dormitorios-franca-sao-paulo_3.jpg","casa-venda-1-dormitorios-franca-sao-paulo_2.jpg","temp.jpg","casa-venda-1-dormitorios-franca-sao-paulo_5.jpg","casa-venda-1-dormitorios-franca-sao-paulo_1.jpg","casa-venda-1-dormitorios-franca-sao-paulo_4.jpg","casa-venda-1-dormitorios-franca-sao-paulo_7.jpg"]},{"id":4,"preco":190000,"descricao":"Apartamento bem confortável","link":"apartamentos-vendas","slug":"casa-venda-4-dormitorios-Franca-São Paulo","dir":"28","imagemPrincipal":"https://img.olx.com.br/images/07/07592902iiiiii8267077.jpg","miniaturasImagens":["casa-venda-4-dormitorios-franca-sao-paulo_5.jpg","casa-venda-4-dormitorios-franca-sao-paulo_4.jpg","casa-venda-4-dormitorios-franca-sao-paulo_1.jpg","temp.jpg","casa-venda-4-dormitorios-franca-sao-paulo_3.jpg","casa-venda-4-dormitorios-franca-sao-paulo_7.jpg","casa-venda-4-dormitorios-franca-sao-paulo_2.jpg","casa-venda-4-dormitorios-franca-sao-paulo_6.jpg"]},{"id":6,"preco":91000,"descricao":"Apartamento muito bonito","link":"apartamentos-vendas","slug":"casa-venda-1-dormitorios-Franca-São Paulo","dir":"30","imagemPrincipal":"https://img.exemplo.com.br/images/07/07592902iiiiii8267077.jpg","miniaturasImagens":["casa-venda-1-dormitorios-franca-sao-paulo_6.jpg","casa-venda-1-dormitorios-franca-sao-paulo_3.jpg","casa-venda-1-dormitorios-franca-sao-paulo_2.jpg","temp.jpg","casa-venda-1-dormitorios-franca-sao-paulo_5.jpg","casa-venda-1-dormitorios-franca-sao-paulo_1.jpg","casa-venda-1-dormitorios-franca-sao-paulo_4.jpg","casa-venda-1-dormitorios-franca-sao-paulo_7.jpg"]},{"id":2,"preco":90000,"descricao":"Apartamento muito bom","link":"apartamentos-vendas","slug":"casa-venda-4-dormitorios-Franca-São Paulo","dir":"26","imagemPrincipal":"https://img.exemplo.com.br/images/07/07592902iiiiii8267077.jpg","miniaturasImagens":["casa-venda-4-dormitorios-franca-sao-paulo_5.jpg","casa-venda-4-dormitorios-franca-sao-paulo_4.jpg","casa-venda-4-dormitorios-franca-sao-paulo_1.jpg","temp.jpg","casa-venda-4-dormitorios-franca-sao-paulo_3.jpg","casa-venda-4-dormitorios-franca-sao-paulo_7.jpg","casa-venda-4-dormitorios-franca-sao-paulo_2.jpg","casa-venda-4-dormitorios-franca-sao-paulo_6.jpg"]},{"id":3,"preco":90000,"descricao":"Apartamento muito bom","link":"apartamentos-vendas","slug":"casa-venda-4-dormitorios-Franca-São Paulo","dir":"27","imagemPrincipal":"https://img.exemplo.com.br/images/07/07592902iiiiii8267077.jpg","miniaturasImagens":["casa-venda-4-dormitorios-franca-sao-paulo_5.jpg","casa-venda-4-dormitorios-franca-sao-paulo_4.jpg","casa-venda-4-dormitorios-franca-sao-paulo_1.jpg","temp.jpg","casa-venda-4-dormitorios-franca-sao-paulo_3.jpg","casa-venda-4-dormitorios-franca-sao-paulo_7.jpg","casa-venda-4-dormitorios-franca-sao-paulo_2.jpg","casa-venda-4-dormitorios-franca-sao-paulo_6.jpg"]},{"id":2,"preco":90000,"descricao":"Apartamento muito bom","link":"apartamentos-vendas","slug":"casa-venda-4-dormitorios-Franca-São Paulo","dir":"26","imagemPrincipal":"https://img.exemplo.com.br/images/07/07592902iiiiii8267077.jpg","miniaturasImagens":["casa-venda-4-dormitorios-franca-sao-paulo_5.jpg","casa-venda-4-dormitorios-franca-sao-paulo_4.jpg","casa-venda-4-dormitorios-franca-sao-paulo_1.jpg","temp.jpg","casa-venda-4-dormitorios-franca-sao-paulo_3.jpg","casa-venda-4-dormitorios-franca-sao-paulo_7.jpg","casa-venda-4-dormitorios-franca-sao-paulo_2.jpg","casa-venda-4-dormitorios-franca-sao-paulo_6.jpg"]},{"id":9,"preco":667000,"descricao":"Apartamento muito bonito","link":"apartamentos-vendas","slug":"casa-venda-1-dormitorios-Franca-São Paulo","dir":"34","imagemPrincipal":"https://img.exemplo.com.br/images/07/07592902iiiiii8267077.jpg","miniaturasImagens":["casa-venda-1-dormitorios-franca-sao-paulo_6.jpg","casa-venda-1-dormitorios-franca-sao-paulo_3.jpg","casa-venda-1-dormitorios-franca-sao-paulo_2.jpg","temp.jpg","casa-venda-1-dormitorios-franca-sao-paulo_5.jpg","casa-venda-1-dormitorios-franca-sao-paulo_1.jpg","casa-venda-1-dormitorios-franca-sao-paulo_4.jpg","casa-venda-1-dormitorios-franca-sao-paulo_7.jpg"]},{"id":1,"preco":1350,"descricao":"Apartamento super","link":"apartamentos-vendas","slug":"casa-venda-2-dormitorios-Franca-São Paulo","dir":"25","imagemPrincipal":"https://img.exemplo.com.br/images/07/07592902iiiiii8267077.jpg","miniaturasImagens":["casa-venda-2-dormitorios-franca-sao-paulo_2.jpg","casa-venda-2-dormitorios-franca-sao-paulo_3.jpg","casa-venda-2-dormitorios-franca-sao-paulo_5.jpg","casa-venda-2-dormitorios-franca-sao-paulo_7.jpg","casa-venda-2-dormitorios-franca-sao-paulo_4.jpg","temp.jpg","casa-venda-2-dormitorios-franca-sao-paulo_1.jpg","casa-venda-2-dormitorios-franca-sao-paulo_6.jpg"]},{"id":1,"preco":1350,"descricao":"Apartamento super","link":"apartamentos-vendas","slug":"casa-venda-2-dormitorios-Franca-São Paulo","dir":"25","imagemPrincipal":"https://img.exemplo.com.br/images/07/07592902iiiiii8267077.jpg","miniaturasImagens":["casa-venda-2-dormitorios-franca-sao-paulo_2.jpg","casa-venda-2-dormitorios-franca-sao-paulo_3.jpg","casa-venda-2-dormitorios-franca-sao-paulo_5.jpg","casa-venda-2-dormitorios-franca-sao-paulo_7.jpg","casa-venda-2-dormitorios-franca-sao-paulo_4.jpg","temp.jpg","casa-venda-2-dormitorios-franca-sao-paulo_1.jpg","casa-venda-2-dormitorios-franca-sao-paulo_6.jpg"]},{"id":7,"preco":91000,"descricao":"Apartamento muito bonito","link":"apartamentos-vendas","slug":"casa-venda-1-dormitorios-Franca-São Paulo","dir":"31","imagemPrincipal":"https://img.exemplo.com.br/images/07/07592902iiiiii8267077.jpg","miniaturasImagens":["casa-venda-1-dormitorios-franca-sao-paulo_6.jpg","casa-venda-1-dormitorios-franca-sao-paulo_3.jpg","casa-venda-1-dormitorios-franca-sao-paulo_2.jpg","temp.jpg","casa-venda-1-dormitorios-franca-sao-paulo_5.jpg","casa-venda-1-dormitorios-franca-sao-paulo_1.jpg","casa-venda-1-dormitorios-franca-sao-paulo_4.jpg","casa-venda-1-dormitorios-franca-sao-paulo_7.jpg"]},{"id":8,"preco":91000,"descricao":"Apartamento muito bonito","link":"apartamentos-vendas","slug":"casa-venda-1-dormitorios-Franca-São Paulo","dir":"32","imagemPrincipal":"https://img.olx.com.br/images/07/07592902iiiiii8267077.jpg","miniaturasImagens":["casa-venda-1-dormitorios-franca-sao-paulo_6.jpg","casa-venda-1-dormitorios-franca-sao-paulo_3.jpg","casa-venda-1-dormitorios-franca-sao-paulo_2.jpg","temp.jpg","casa-venda-1-dormitorios-franca-sao-paulo_5.jpg","casa-venda-1-dormitorios-franca-sao-paulo_1.jpg","casa-venda-1-dormitorios-franca-sao-paulo_4.jpg","casa-venda-1-dormitorios-franca-sao-paulo_7.jpg"]},{"id":1,"preco":1350,"descricao":"Apartamento super","link":"apartamentos-vendas","slug":"casa-venda-2-dormitorios-Franca-São Paulo","dir":"25","imagemPrincipal":"https://img.olx.com.br/images/07/07592902iiiiii8267077.jpg","miniaturasImagens":["casa-venda-2-dormitorios-franca-sao-paulo_2.jpg","casa-venda-2-dormitorios-franca-sao-paulo_3.jpg","casa-venda-2-dormitorios-franca-sao-paulo_5.jpg","casa-venda-2-dormitorios-franca-sao-paulo_7.jpg","casa-venda-2-dormitorios-franca-sao-paulo_4.jpg","temp.jpg","casa-venda-2-dormitorios-franca-sao-paulo_1.jpg","casa-venda-2-dormitorios-franca-sao-paulo_6.jpg"]},{"id":1,"preco":1350,"descricao":"Apartamento super","link":"apartamentos-vendas","slug":"casa-venda-2-dormitorios-Franca-São Paulo","dir":"25","imagemPrincipal":"https://example.com.br/images/07/07592902iiiiii8267077.jpg","miniaturasImagens":["casa-venda-2-dormitorios-franca-sao-paulo_2.jpg","casa-venda-2-dormitorios-franca-sao-paulo_3.jpg","casa-venda-2-dormitorios-franca-sao-paulo_5.jpg","casa-venda-2-dormitorios-franca-sao-paulo_7.jpg","casa-venda-2-dormitorios-franca-sao-paulo_4.jpg","temp.jpg","casa-venda-2-dormitorios-franca-sao-paulo_1.jpg","casa-venda-2-dormitorios-franca-sao-paulo_6.jpg"]},{"id":1,"preco":1350,"descricao":"Apartamento super","link":"apartamentos-vendas","slug":"casa-venda-2-dormitorios-Franca-São Paulo","dir":"25","imagemPrincipal":"https://example.com.br/images/07/07592902iiiiii8267077.jpg","miniaturasImagens":["casa-venda-2-dormitorios-franca-sao-paulo_2.jpg","casa-venda-2-dormitorios-franca-sao-paulo_3.jpg","casa-venda-2-dormitorios-franca-sao-paulo_5.jpg","casa-venda-2-dormitorios-franca-sao-paulo_7.jpg","casa-venda-2-dormitorios-franca-sao-paulo_4.jpg","temp.jpg","casa-venda-2-dormitorios-franca-sao-paulo_1.jpg","casa-venda-2-dormitorios-franca-sao-paulo_6.jpg"]}]
Here is my Java code
String q = "select id, preco, 'casas-venda' as link, descricao, dir, slug from casa_venda " + "union alln" + "select id, preco, 'apartamentos-vendas' as link, descricao, dir, slug from apartamento_venda " + "union alln" + "select id, preco, 'loft-vendas' as link, descricao, dir, slug from loft_venda " + "union alln" + "select id, preco, 'studio-vendas' as link, descricao, dir, slug from studio_venda " + "union alln" + "select id, preco, 'quitinete-venda' as link, descricao, dir, slug from quitinete_venda"; List<Imovel> imoveis = entityManager.createNativeQuery(q, Imovel.class) .getResultList();
Bellow is Imovel class
@Entity @SqlResultSetMapping( name = "imovelMapping", classes = @ConstructorResult( targetClass = Imovel.class, columns = { @ColumnResult(name = "id", type = Integer.class), @ColumnResult(name = "preco", type = Integer.class), @ColumnResult(name = "descricao", type = String.class), @ColumnResult(name = "link", type = String.class), @ColumnResult(name = "slug", type = String.class), @ColumnResult(name = "dir", type = String.class) })) public class Imovel { public Imovel() { } public Imovel(Integer id, Integer preco, String descricao, String link, String slug, String dir) { this.id = id; this.preco = preco; this.descricao = descricao; this.link = link; this.slug = slug; this.dir = dir; System.out.println(this.getPreco()); System.out.println("/var/www/back_imoveis/back_imoveis/imoveis/src/main/resources/fotos/" + this.dir + "/miniaturas"); File folder = new File("/var/www/back_imoveis/back_imoveis/imoveis/src/main/resources/fotos/" + this.dir + "/miniaturas"); File[] listOfFiles = folder.listFiles(); for (int i = 0; i < listOfFiles.length; i++) { if (listOfFiles[i].isFile()) { miniaturasImagens.add(listOfFiles[i].getName()); } } this.miniaturasImagens = miniaturasImagens; } public Imovel(Integer preco) { this.preco = preco; } @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private long id; @Column(name = "preco") private Integer preco; @Column(name = "descricao") private String descricao; @Column(name = "link") private String link; @Column(name = "slug") private String slug; @Column(name = "dir") private String dir; @Transient private String imagemPrincipal; @Transient private List<String> miniaturasImagens = new ArrayList<String>(); public Integer getPreco() { return preco; } public void setPreco(Integer preco) { this.preco = preco; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getImagemPrincipal() { return "https://img.olx.com.br/images/07/07592902iiiiii8267077.jpg"; // return imagemPrincipal; } public void setImagemPrincipal(String imagemPrincipal) { this.imagemPrincipal = imagemPrincipal; } public String getLink() { return link; } public void setLink(String link) { this.link = link; } public String getDescricao() { return descricao; } public void setDescricao(String descricao) { this.descricao = descricao; } public String getSlug() { return slug; } public void setSlug(String slug) { this.slug = slug; } public String getDir() { return dir; } public void setDir(String dir) { this.dir = dir; } public List<String> getMiniaturasImagens() { return miniaturasImagens; } public void setMiniaturasImagens(List<String> imagens) { this.miniaturasImagens = imagens; } }
Advertisement
Answer
I was very fraightened by the bug I was having, because createNativeQuery was like a light in the end of the tunnel after struggling with the limitations of JpaRepository. After getting rid of nulls on the database column now the results are pretty much what I expect. I don’t know why my union with nulls running directly on the database works and with createNativeQuery it produces strange results. The particular column I was having problem is “descricao”, some table had null some have characters. I hope it can help others!