我有四个表,USER(用户)、CONTACT(联系人)、CONACT_TYPE(联系类型)和USER_CONTACT(用户联系人)。
USER_CONTACT 存储了用户拥有的所有联系人信息,填充虚拟数据的表如下: USER TABLE(用户表)
用户联系方式
联系方式
我想要做的是创建一个查询,返回只包含电话联系类型的列表。这是我的Hibernate函数:
每个表都映射到一个模型类。重要的类信息如下所示。
所有的类都有标准的getter和setter,用于上述表格中所有列属性。
我一直收到一个错误,称无法解析我的UserContact类中contact.contactType属性。有人知道如何在Hibernate中正确执行这样的操作吗?
USER_CONTACT 存储了用户拥有的所有联系人信息,填充虚拟数据的表如下: USER TABLE(用户表)
USER_ID(int)| FIRST_NAME(varchar(2) | LAST_NAME(varchar(2) |
------------------------------------------------------------
| 1 | TEST | USER |
------------------------------------------------------------
用户联系方式
USER_CONTACT_ID(int) | USER_ID(int) | CONTACT_ID(int) |
-------------------------------------------------------
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
-------------------------------------------------------
联系方式
CONTACT_ID(int) | CONTACT_TYPE_ID(int) | CONTACT(varchar(2)|
-------------------------------------------------------------
| 1 | 2 | (555) 555-5555 |
| 2 | 2 | (555) 593-3938 |
| 3 | 1 | test@oracle.com |
-------------------------------------------------------------
联系类型
CONTACT_TYPE_ID(int) | CONTACT_TYPE |
-------------------------------------
| 1 | EMAIL |
| 2 | PHONE |
-------------------------------------
我想要做的是创建一个查询,返回只包含电话联系类型的列表。这是我的Hibernate函数:
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();
}
}
每个表都映射到一个模型类。重要的类信息如下所示。
Contact.java
包含对ContactType.java类的@ManyToOne关系。@ManyToOne(optional = false, fetch = FetchType.EAGER)
private ContactType contactType;
UserContact.java
包含一个@ManyToOne关系到Contact.java类和一个@ManyToOne关系到User.java类
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Contact contact;
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private User user;
所有的类都有标准的getter和setter,用于上述表格中所有列属性。
我一直收到一个错误,称无法解析我的UserContact类中contact.contactType属性。有人知道如何在Hibernate中正确执行这样的操作吗?