JPA/Hibernate duvida no uso de criteria

7 respostas
P

Olá,

uma ajuda pois numca usei criteria e queria fazer um "where ou melhor restrição"
em um objeto onde tenho o campo email do objeto Usuario mas conforme abaixo me deu um
erro …

Se alguem puder me ajudar agradeceria…

abs

manager = PersistenceServiceFactory.getInstance().getManager();
			Session session = (Session) manager.getDelegate();
	
			Criteria criteria = session.createCriteria(Saldo.class)
			.add(Restrictions.eqProperty("user.email", "[email removido]"))
			;
			
			List result = criteria.list(); 


----
class Saldo{

  private int id;
  private Usuario user;


}


----------



class Usuario {

   private int id;
   private String email;

}
erro :

= org.hibernate.QueryException: could not resolve property: user.email of: br.com.Saldo

7 Respostas

eduardoac

Acredito que assim vá funcionar:

Session session = (Session) manager.getDelegate();
Criteria criteria = session.createCriteria(Saldo.class);

criteria.createAlias("user", "userAlias");
criteria.add(Restrictions.eqProperty("userAlias.email", "[email removido]"));   

List result = criteria.list();
Faça o teste, se não der, analiso melhor. Abraços.
Luiz_Gustavo

Olá,

só vou complementar o que o eduardoac postou, colocando um link de referência para o capítulo da documentação do Hibernate que mostra isso, caso outros usuários queiram pesquisar mais sobre esse recurso (como foi o meu caso):

http://www.hibernate.org/hib_docs/reference/en/html/querycriteria-associations.html

[]'s

eduardoac

Perfeito, melhor ainda!

P

deu erro :

Erro testCriteriaBuscaPedido() = org.hibernate.QueryException: could not resolve property: xxxxxxx@certisign of: br.com.Saldo

uma duvida :

Criteria c = session.createCriteria(Saldo.class);
			c.createAlias("user", "userAlias");
			c.add(Restrictions.eqProperty("userAlias.email", "[email removido]"));

esse user que estou referenciando é o user do Objeto Saldo é isso ??? pra tirar uma duvida ??? se é isso mesmo ???

eduardoac

O User é do objeto Saldo sim. Tente isso:

Criteria c = session.createCriteria(Saldo.class); c.createAlias("user", "userAlias"); c.add(Expression.eq("userAlias.email", "[email removido]"));
Abraços.

eduardoac

Assim deve funcionar, qualquer coisa nos avise.

P

Obrigado deu certo!!!!!!!!!!!!!!!!!!!!!!!

pois peguei um exemplo na internet com essa sintaxe e dava erro estranho mas
valeu que agora esta´funcionando a nivel curiosidade o exemplo que peguei

public static void main(String[] args) {
		// TODO Auto-generated method stub
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPA9");
        EntityManager em = emf.createEntityManager();
        Session session = (Session) em.getDelegate();
    	

		Criteria c =  session.createCriteria(Cidades.class);
		c.add( Restrictions.eq("estado.uf", "SP") );
		c.addOrder( Order.asc("descricao") );
		List cidadesDeSaoPaulo = c.list();


	}




erro:

Exception in thread "main" org.hibernate.QueryException: could not resolve property: estado.uf of: br.com.exemplojpa.modelo.Cidades
	at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:44)
	at org.hibernate.persister.entity.AbstractPropertyMapping.toColumns(AbstractPropertyMapping.java:59)
	at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:31)
	at org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1354)
	at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:434)
	at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumnsUsingProjection(CriteriaQueryTranslator.java:394)
	at org.hibernate.criterion.SimpleExpression.toSqlString(SimpleExpression.java:45)
	at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:334)
	at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:90)
	at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:59)
	at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:67)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1550)
	at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
	at br.com.exemplojpa.teste.TesteCidades.main(TesteCidades.java:32)


--jar do projeto
[code]
ant-antlr-1.6.5.jar
antlr-2.7.5H3.jar
asm.jar
asm-attrs.jar
aspectjrt.jar
aspectjweaver.jar
c3p0-0.9.1.jar
cglib-2.1.3.jar
commons-beanutils-1.6.jar
commons-collections-2.1.1.jar
commons-logging-1.1.jar
commons-validator-1.3.0.jar
dom4j-1.6.1.jar
ejb3-persistence.jar
hibernate3.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate-entitymanager.jar
hibernate-search.jar
hibernate-validator.jar
javassist.jar
jta.jar
log4j-1.2.15.jar
lucene-core-2.3.2.jar
mysql-connector-java-5.0.8-bin.jar
ognl-2.6.11.jar
spring.jar
struts2-sitemesh-plugin-2.0.11.1.jar
struts2-spring-plugin-2.0.11.1.jar
xwork-2.0.4.jar

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

@Entity
public class Cidades {
@Id
private int id;
@Column(name="codigo", length=3,columnDefinition="int")
private Integer codigo;

@Column(name="descricao", length=40,columnDefinition="varchar(40)")
private String descricao;

@ManyToOne
@JoinColumn(name="uf")
private Estados estado;

public Cidades(){

}
----
@Entity
public class Estados {

@Id
private int id;

@Column(name="uf", length=2,columnDefinition="varchar(2)")
private String uf;

@Column(name="descricao", length=30,columnDefinition="varchar(30)")
private String descricao;

public Estados(){

}

public int getId() {
return id;
}

[/code]

Criado 21 de janeiro de 2009
Ultima resposta 22 de jan. de 2009
Respostas 7
Participantes 3