Trabajé construyendo una consulta dinámica utilizando el CriteriaBuilder en JPA 2.0. Mi aplicación es Spring 3.0, Hibernate 3.6.0 + JPA 2.0. En realidad tengo dos entidades es una taUser
y otra es taContact
, en mi clase taUser
tiene una propiedad, que tiene muchos a uno con relación taContact
mis clases POJO son (ejemplo muestra)cómo construir una consulta dinámica para una relación muchos a uno utilizando el CriteriaBuilder de JPA 2.0
public class TaUser implements java.io.Serializable {
private int userId;
private TaContact taContact;
public int getUserId() {
return this.userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public TaContact getTaContact() {
return taContact;
}
public void setTaContact(TaContact taContact) {
this.taContact = taContact;
}
}
public class TaContact implements java.io.Serializable {
private int contactId;
public int getContactId() {
return this.contactId;
}
public void setContactId(int contactId) {
this.contactId = contactId;
}
private int contactNumber;
public int getContactNumber() {
return contactNumber;
}
public void setContactNumber(int contactNumber) {
this.contactNumber = contactNumber;
}
}
y mi .xml ORM
<entity class="com.common.model.TaUser" name="TaUser">
<table name="ta_user" />
<attributes>
<id name="userId">
<column name="USER_ID" />
<generated-value strategy="AUTO" />
</id>
<many-to-one name="taContact"
target-entity="TaContact">
<join-column name="Contact_id" />
</many-to-one>
</attributes>
</entity>
¿Cómo puedo crear la construcción de una consulta dinámica utilizando criterios de hecho este es mi consulta JPQL quiero cambiar en la construcción de una consulta dinámica utilizando criterios.
String jpql =
"select * from Tauser user where user.userId = "1" and user.taContact.contactNumber="8971329902";
¿Cómo puedo verificar el segundo estado?
user.taContact.contactNumber = "8971329902"
Root<T> rootEntity;
TypedQuery<T> typedQuery = null;
EntityManagerFactory entityManagerFactory = this.getJpaTemplate()
.getEntityManagerFactory();
CriteriaBuilder criteriaBuilder = entityManagerFactory
.getCriteriaBuilder();
CriteriaQuery<T> criteriaQuery = criteriaBuilder.createQuery(TaUser.class);
rootEntity = criteriaQuery.from(TaUser.class);
criteriaQuery.where(criteriaBuilder.equal(rootEntity.get("userId"),
"1"));
criteriaQuery.where(criteriaBuilder.equal(rootEntity.get("taContact.contactNumber"),
"8971329902")); --- here i m getting error
at
org.hibernate.ejb.criteria.path.AbstractPathImpl.unknownAttribute(AbstractPathImpl.java:110)
at org.hibernate.ejb.criteria.path.AbstractPathImpl.locateAttribute(AbstractPathImpl.java:218)
at org.hibernate.ejb.criteria.path.AbstractPathImpl.get(AbstractPathImpl.java:189)
at com.evolvus.core.common.dao.CommonDao.findByCriteria(CommonDao.java:155)
cómo puedo solucionar esto?
por favor: si el inglés no es su lengua materna, está bien. Pero trate de no empeorar las cosas escribiendo LOL-speak como 'u' en lugar de 'usted'. Además, trate de no escribir mal las clases, los paquetes y las tecnologías a las que se refiere. Tu publicación es lo suficientemente difícil de leer como es. –
Traté de corregir su publicación, pero aun así, su respuesta es irrelevante, ya que la pregunta es acerca de la API de criterios de JPA 2, no de la API de criterios de Hibernate. –
Hola Sean Patrick Floyd, tu segundo comentario es correcto. ¿Por qué no puedes darme alguna sugerencia? –