Sql 加入Hibernate查询

Sql 加入Hibernate查询,sql,hibernate,Sql,Hibernate,我有以下课程: class User{ String id; ArrayList<UserAttribute> attributeList=new ArrayList<UserAttribute>(); } class UserAttribute{ User user; String value; String key; } 表格用户属性 column user_id column key column value 示例用户表内容 user_id="123" us

我有以下课程:

class User{
String id;
ArrayList<UserAttribute> attributeList=new ArrayList<UserAttribute>();
}

class UserAttribute{
User user;
String value;
String key;
}
表格用户属性

column user_id
column key
column value
示例用户表内容

user_id="123"

user_id="234"
示例用户属性表内容

user_id="123", key="address", value="green house street"

user_id=234, key="address", value="blue house street"

user_id="123", key="phone", value="234324"

user_id="234", key="phone", value="786988"
我想获取地址为“green house street”且电话为“234324”的用户

我在sql编辑器中编写sql(oracle):

 select u.* from user u left join user_attribute prop on u.id=prop.user_id inner join user_attribute prop2 on prop.user_id = prop2.user_id where prop.value = 'green house street' and prop.key = 'address' and prop2.key ='phone'  and prop2.value = '234324';
我在hibernate方面尝试了很多东西:但无法使用join,因为get

“上未选中的令牌”

使用“on”子句时出错

最后我写了

entityManager.createQuery(
select u from User u, u.attributeList prop, u.attributeList prop2 where prop.value = :address and prop.key = :key and prop2.key =:key2  and prop2.value = :phone and prop.user.id=u.id and prop2.user.id=u.id and prop2.user.id=prop.user.id
)..setParameter("key", "address")
                .setParameter("phone", "234324")
                .setParameter("key2", "phone")
                .setParameter("address", "green house street").getSingleResult();
还是没有机会,

我试图找到一个单一的查询解决方案,但迄今为止无法实现。
谢谢您的建议。

您需要进行两次联接,但不需要在子句上指定任何
,因为Hibernate知道,由于关联的映射,表是如何链接在一起的。因此,以下查询应该可以工作:

select u from User u
inner join u.attributeList a1
inner join u.attributeList a2
where a1.value = 'green house street' and a1.key = 'address' 
and a2.key ='phone' and a2.value = '234324'

您需要进行两个联接,但不需要在
子句上指定任何
,因为Hibernate知道,由于关联的映射,表是如何链接在一起的。因此,以下查询应该可以工作:

select u from User u
inner join u.attributeList a1
inner join u.attributeList a2
where a1.value = 'green house street' and a1.key = 'address' 
and a2.key ='phone' and a2.value = '234324'

Hibernate对“on”子句有问题

使用本机sql查询


请参阅Hibernate在“on”子句中遇到问题

使用本机sql查询

plz参考