У меня есть классы:
class User{
String id;
ArrayList<UserAttribute> attributeList=new ArrayList<UserAttribute>();
}
class UserAttribute{
User user;
String value;
String key;
}
У меня есть таблицы, связанные с классами.
таблица пользователь
column id
таблица user_attribute
column user_id
column key
column value
пример содержимого таблицы пользователя
user_id="123"
user_id="234"
пример содержимого таблицы user_attribute
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"
Я хочу получить пользователя, у которого есть адрес "улица зеленого дома" и (нет или) имеет телефон "234324"
Я пишу sql (oracle) в редакторе sql:
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';
Я много чего перепробовал на стороне гибернации: но не могу использовать соединение, потому что получаю
"незапланированный токен при ошибке"
при использовании предложения "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();
все еще нет шансов,
Я очень стараюсь найти решение для одного запроса, но пока не могу достичь.Спасибо за любую идею.