Hibernate gerando sql errado

2 respostas
faeldix

segue meu main()

package br.com.testes;

import java.io.IOException;
import java.text.ParseException;
import java.util.List;
import java.util.Scanner;
import java.util.Set;

import javax.persistence.Query;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import br.com.bean.Autor;
import br.com.bean.Livro;

public class Testes {

	/**
	 * @param args
	 * @throws ParseException 
	 * @throws IOException 
	 */
	
	public static void main(String[] args) throws ParseException, IOException {
		
		EntityManagerFactory fac = Persistence.createEntityManagerFactory("MeuBanco");
		EntityManager manager = fac.createEntityManager();
		
		manager.getTransaction().begin();
		Query query = manager.createQuery("SELECT l.nome, l.autores FROM Livro l");
		List<Object[]> livros = query.getResultList();
		
		for (Object[] livro : livros) {
			System.out.println("Livro: "+ livro[0] +" Autor(es): " + livro[1]);
		}
		
		manager.getTransaction().commit();
        manager.close();
        fac.close();
		
	}

}

minha classe Livro

package br.com.bean;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQuery;

@Entity
@NamedQuery(name = "findByNome", query = "select l from Livro l where l.nome = ?1")
public class Livro {

	@Id @GeneratedValue
	private Long id;
	private String nome;
	@ManyToMany(cascade=CascadeType.PERSIST)
	@JoinTable(name="autor_livro", joinColumns=@JoinColumn(name="livro_id"), inverseJoinColumns=@JoinColumn(name="autor_id"))
	private Set<Autor> autores;
	
	public Livro() {
		this.autores = new HashSet<Autor>();
	}
	
	public Set<Autor> getAutores(){
		return this.autores;
	}
	
	public void add(Autor autor) {
		autores.add(autor);
	}
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return this.nome;
	}
	
	
}

olhem o codigo que ta sendo gerado:
a linha com o "<<--" esta apontando a linha errada.. o que sera que ta dando? :shock:

select
        livro0_.nome as col_0_0_,
        . as col_1_0_, <<--
        autor2_.id as id8_,
        autor2_.nome as nome8_ 
    from
        Livro livro0_ 
    inner join
        autor_livro autores1_ 
            on livro0_.id=autores1_.livro_id 
    inner join
        Autor autor2_ 
            on autores1_.autor_id=autor2_.id

2 Respostas

Nicolas_Fernandes

Já tentou mapear o seu atributo “NOME” da classe Livro?
Mapeia ele e faz o teste!

@Column(name="nome", lenght="50") private String nome;

Abraços!

faeldix

testei aqui e nao funfou… dropei o banco até… pra fazer um banco “limpo”.

Porem :confused:

Criado 6 de fevereiro de 2012
Ultima resposta 6 de fev. de 2012
Respostas 2
Participantes 2