2015-09-07 2 views
1

У меня есть коллекция Set<Tag> в классе сущности. Tag класс содержит только Long id и String значение. Im пытаясь найти Place по Tag, но им получать ошибки Could not analyze lambda codeКак искать Установить с помощью Jinq

String name = places.getTag().getName(); 
    if (name != null) { 
     stream = stream.where(p -> p.getTags().iterator().next().getName().equals(name)); 
    } 

Существует способ сделать его жестким и элегантным? Я знаю, что мой код неверен, и им получать сообщение об ошибке, потому что Jinq вероятно не поддерживает что-то вроде этого p.getTags().iterator().next().getName()

ответ

1

Я не знаком с вами схемой, но, возможно, вы могли бы сделать присоединиться к расплющить свои структуры данных с чем-то как это:

stream 
    .joinList(p -> p.getTags()) 
    .where(pair -> pair.getTwo().getName().equals(name)); 

Опять же, это зависит от схемы и объекты базы данных, но если у вас есть настройки правильные отношения, то вы могли бы пойти еще проще с чем-то вроде этого:

tagStream 
    .where(tag -> tag.getName().equals(name)) // get the right tag 
    .selectAllList(tag -> tag.getPlaces())  // get all places with that tag 

Если вы не можете использовать соединение, вы можете попробовать использовать подзапрос, но подзапросы ведут себя немного прерывисто для разных поставщиков JPA. Для подзапросов просто убедитесь, что подзапрос находится в том же формате, что и обычный запрос.

stream = stream 
    .where(p -> JinqStream.from(p.getTags()) 
     .where(tag -> tag.getName().equals(name)) 
     .count() > 0); 

 Смежные вопросы

  • Нет связанных вопросов^_^