Duvidas sobre hibernate com jta-annotations

2 respostas
S

E aí galera, beleza?
Estou começando meus studos em jpa annotation com hibernate mas, ja encontrei um problema.
estou tentando criar uma criteria para buscar um item um nivel no agregação de um vo mas, por algum motivo não consigo, o hibernate informa que o parametro não existe.
Meus mapeamentos:

@Entity
@Table(name="coordenador")
public class Coordenador implements VO{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -8910674378340122298L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE)
	@Column(name="matriculacoordenador",unique=true,nullable=false)	
	private String matriculaCoordenador;
	
	@Column(name="nome",nullable=false,length=45)
	private String nome;
	
	@OneToMany(mappedBy="codigo")
	private Collection<AgendaAdmissao> agendaAdmissao;
        
        //getters...
       //setters
}
@Entity
@Table(name="agendaadmissao")
public class AgendaAdmissao implements VO{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -8970168923522573021L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE)
	@Column(name="codigoagenda",unique=true,nullable=false)
	private Long codigo;
	
	@Column(name="nomecandidato",nullable=false)
	private String nomeCandidato;
	
	@ManyToOne
	@JoinColumn(name="matriculacoordenador",nullable=false,insertable=true, updatable=true)
	private Coordenador coordenador;
	
	@ManyToOne
	@JoinColumn(name="codigocurso",nullable=false,insertable=true, updatable=true)
	private Curso curso;
	
	@Column(name="data",nullable=false)
	private Date data;
	
	@Column(name="status",nullable=false)
	private String status;
        
        //getters...
       //setters
}
a criteira está assim:
criteria.add(Expression.eq("coordenador.nome", "Coordenador 2"));

Como podem perceber o parametro "coordenador.nome" está devidamente mapeado.
O engraçado é que se eu buscar pela chave da classe coordenador funcionacorretamente:
[code]
criteria.add(Expression.eq("coordenador.matriculaCoordenador", "p100"));

Creio que me esqueci de algo no mapeamento. Se puderem me ajudar eu agradeço.

2 Respostas

S

E aí galera beleza?

Pelo que pude constatar meu mapeamento não está errado.
Fiz um hql e funcionou corretamente

Query query = getSessaoAtual().createQuery("select agenda from AgendaAdmissao agenda where agenda.coordenador.nome = :nome");
		query.setParameter("nome", "Coordenador 1");

Será algum bug na implementação de criteria do hibernatge 3?

S

E aí galera geleza?
Consegui resolver meu problema. O meu problema estava em não utilizar alias para a entidade coordenador.
Fiz algumas alterações nos mapeamentos dos vos e passei a utilizar restrictions mas o que resolvel mesmo foi o alias no criteria.

Os mapeamentos ficaram assim:
Agenda Adimissao

package br.com.fiap.agenda.vo;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name="agendaadmissao")
public class AgendaAdmissao implements VO{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -8970168923522573021L;
	
	@Id
	@Column(name="codigoagenda",length=7)
	private Long codigo;
	
	@Column(name="nomecandidato",length=45)
	private String nomeCandidato;
	
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="matriculacoordenador")
	private Coordenador coordenador;
	
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="codigocurso")	
	private Curso curso;
	
	@Column(name="data")
	private Date data;
	
	@Column(name="status",length=1)
	private String status;
	
	public Long getCodigo() {
		return codigo;
	}
	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}
	public String getNomeCandidato() {
		return nomeCandidato;
	}
	public void setNomeCandidato(String nomeCandidato) {
		this.nomeCandidato = nomeCandidato;
	}
	public Date getData() {
		return data;
	}
	public void setData(Date data) {
		this.data = data;
	}
	public String getStatus() {
		return status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	public Curso getCurso() {
		return curso;
	}
	public void setCurso(Curso curso) {
		this.curso = curso;
	}
	public Coordenador getCoordenador() {
		return coordenador;
	}
	public void setCoordenador(Coordenador coordenador) {
		this.coordenador = coordenador;
	}
	
	@Override
	public String toString() {
		DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
		String string = codigo+"\n"+nomeCandidato+"\n"+format.format(data)+"\n"+status+"\n"+curso.getNome()+"\n"+coordenador.getNome();
		return string;
	}
	
	

}

coordenador:

package br.com.fiap.agenda.vo;

import java.util.Collection;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name="coordenador")
public class Coordenador implements VO{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -8910674378340122298L;
	
	@Id
	@Column(name="matriculacoordenador",length=5, unique=true)
	private String matriculaCoordenador;
	
	@Column(name="nome",length=45)
	private String nome;
	
	@OneToMany(fetch=FetchType.LAZY,mappedBy="coordenador")
	private Collection<AgendaAdmissao> agendaAdmissao;
	
	public Collection<AgendaAdmissao> getAgendaAdmissao() {
		return agendaAdmissao;
	}
	public void setAgendaAdmissao(Collection<AgendaAdmissao> agendaAdmissao) {
		this.agendaAdmissao = agendaAdmissao;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getMatriculaCoordenador() {
		return matriculaCoordenador;
	}
	public void setMatriculaCoordenador(String matriculaCoordenador) {
		this.matriculaCoordenador = matriculaCoordenador;
	}

}

O criteria:

criteria.createAlias("coordenador", "c");
criteria.add(Restrictions.eq("c.nome", "Coordenador 1"));

Valeu pela força galera!

Criado 23 de julho de 2007
Ultima resposta 28 de jul. de 2007
Respostas 2
Participantes 1