Tengo cuatro mesas, USUARIO, contacto, CONACT_TYPE y USER_CONTACTHibernate ayuda con un criterio de consulta de unión
USER_CONTACT almacena todos los contactos que un usuario tiene mesas pobladas con datos ficticios son los siguientes
TABLA DE USUARIO
USER_ID(int)| FIRST_NAME(varchar(2) | LAST_NAME(varchar(2) |
------------------------------------------------------------
| 1 | TEST | USER |
------------------------------------------------------------
USER_CONTACT
USER_CONTACT_ID(int) | USER_ID(int) | CONTACT_ID(int) |
-------------------------------------------------------
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
-------------------------------------------------------
CONTACTAR
CONTACT_ID(int) | CONTACT_TYPE_ID(int) | CONTACT(varchar(2)|
-------------------------------------------------------------
| 1 | 2 | (555) 555-5555 |
| 2 | 2 | (555) 593-3938 |
| 3 | 1 | [email protected] |
-------------------------------------------------------------
CONTACT_TYPE
CONTACT_TYPE_ID(int) | CONTACT_TYPE |
-------------------------------------
| 1 | EMAIL |
| 2 | PHONE |
-------------------------------------
Lo que estoy tratando de hacer es crear una consulta que devolverá una lista que tiene sólo contiene el CONACT_TYPE teléfono aquí es mi hibernación función hasta ahora
public List<UserContact> getUserContactByType(Integer userId, String contactType) {
Session session = getSessionFactory().openSession();
try {
Criteria criteria = session.createCriteria(UserContact.class, "USER_CONACT");
criteria.add(Restrictions.eq("USER_CONACT.userId, userId");
criteria.add(Restrictions.eq("USER_CONTACT.contact.contactType.contactType", contactType);
return (List<UserContact>)criteria.list();
}
}
Cada tabla está asignada a una clase de modelo. La información importante de la clase es la siguiente.
Contact.java
Contiene una relación @ManyToOne a clase ContactType.java
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private ContactType contactType;
UserContact.java
Contiene una relación @ManyToOne a clase y Contact.java un @ManyToOne en la clase User.java
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Contact contact;
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private User user;
Todas las clases tienen los getters y setters estándar para todos los atributos de columna para las tablas anteriores también.
Sigo recibiendo un error que indica que no puede resolver la propiedad contact.contactType de mi clase UserContact. ¿Alguien sabe cómo ejecutar correctamente algo así en Hibernate?
No puede escribir criterios (ni HQL) basados en tablas. Necesitas decirnos algo sobre las clases. –
¿Ha expresado sus contactos de usuario como entidad en su aplicación (muchos a muchos unidireccionales usando la tabla de unión). ? –
@Stefan Steinegger He actualizado con información sobre las clases – medium