Problema Com Criteria

2 respostas
zepunk

Olá pessoal estou gerando uma pesquisa com o critéria e quando eu pesso pera executar me lança a seginte exeption

could not resolve property: veiculo.cor of: Exception in thread "main" org.hibernate.QueryException: could not resolve property: veiculo.cor of: br.com.conseda.autorisco.model.Importacao

Meu relacionamente é @OneToOne

@Entity
@Table(name="tblImportacao")
public class Importacao {

	private Integer id;
	
	private String placa;
	
	private Veiculo veiculo;
	
	@OneToOne(fetch = FetchType.EAGER, mappedBy="importacao")
	@JoinColumn(name="IDCONSULTA")
	public Veiculo getVeiculo() {
		return veiculo;
	}


	@Id
	@GeneratedValue
	@Column(name="IDCONSULTA")
	public Integer getId() {
		return id;
	}


	@Column(name="Placa")
	public String getPlaca() {
		return placa;
	}
}
@Entity
@Table(name = "tblVeiculo")
public class Veiculo {

	private Integer id;

	private String cor;

	private Importacao importacao;

	@Column(name = "Cor")
	public String getCor() {
		return cor;
	}

	@Id
	@Column(name = "IDCONSULTA")
	public Integer getId() {
		return id;
	}

	@OneToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "IDCONSULTA")
	public Importacao getImportacao() {
		return importacao;
	}
}

Na minha classe Dao quando referencio o atributo de veículo ele lança exceção.

public Importacao pesquisarByPlaca(String placa) {
		
		return (Importacao) this.session.createCriteria(Importacao.class)
				.add(Expression.eq("placa", placa))
				.add(Expression.eq("veiculo.cor","Preta"))
				.addOrder(Order.desc("id"))
				.setMaxResults(1)
				.uniqueResult();
	}

porém este código funciona.

public Importacao pesquisarByPlaca(String placa) {
		
		return (Importacao) this.session.createCriteria(Importacao.class)
				.add(Expression.eq("placa", placa))
				.addOrder(Order.desc("id"))
				.setMaxResults(1)
				.uniqueResult();
	}

Alguém poderia me dizer o que esta acontecendo ???

Obrigado a todos.

2 Respostas

marciobarroso

Vc precisa criar um alias :

Criteria criteria = this.session.createCriteria(Importacao.class);
criteria.createAlias("veiculo", "v");
 				criteria.add(Expression.eq("placa", placa))
 				criteria.add(Expression.eq("v.cor","Preta"))
 				criteria.addOrder(Order.desc("id"))
 				criteria.setMaxResults(1)
 			return 	criteria.uniqueResult();

Ao invés de chamar “veiculo.cor” vc usa “v.cor” …

testa ai e diga se funcioona

zepunk

Muito obrigado.
Funcionou.

Value…

Criado 28 de dezembro de 2006
Ultima resposta 28 de dez. de 2006
Respostas 2
Participantes 2