gpt4 book ai didi

带有条件连接查询的 Hibernate 帮助

转载 作者:行者123 更新时间:2023-12-04 14:51:31 27 4
gpt4 key购买 nike

我有四个表,USER、CONTACT、CONACT_TYPE 和 USER_CONTACT

USER_CONTACT 存储用户具有填充虚拟数据的表的所有联系人如下

用户表

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 |
-------------------------------------------------------

联系方式
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
CONTACT_TYPE_ID(int) | CONTACT_TYPE | 
-------------------------------------
| 1 | EMAIL |
| 2 | PHONE |
-------------------------------------

我想要做的是创建一个查询,该查询将返回一个仅包含 PHONE CONACT_TYPE 的列表,这是我目前的 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();

}

}

每个表都映射到一个模型类。重要的类信息如下。

联系.java

包含与 ContactType.java 类的 @ManyToOne 关系
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private ContactType contactType;

UserContact.java

包含到 Contact.java 类的 @ManyToOne 关系和 User.java 类上的 @ManyToOne
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Contact contact;

@ManyToOne(optional = false, fetch = FetchType.LAZY)
private User user;

所有类都具有上表的所有列属性的标准 getter 和 setter。

我不断收到错误消息,指出它无法解析我的 UserContact 类的属性 contact.contactType。任何人都知道如何在 hibernate 中正确执行这样的事情?

最佳答案

我想通了,我不知道 createAlias 函数。如果有人想知道,解决方案如下。

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.createAlias("USER_CONACT.contact", "c");

criteria.add(Restrictions.eq("c.contactType.contactType", contactType);

return (List<UserContact>)criteria.list();

}

}

关于带有条件连接查询的 Hibernate 帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5339020/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com