Именованный запрос, когда свойство является объектом?
Я хотел бы сделать этот запрос в JPA:
SELECT * FROM `happyDB`.`users` U WHERE U.party_as_user =1 AND U.party_party_id =2
Это работает нормально, но моя проблема в том, что у меня есть Party
только как объект, а не как идентификатор, и я не могу заставить его работать.
в Users
-Если я пытаюсь сделать именованный запрос у меня есть следующее:
@JoinColumn(name = "pary_party_id", referencedColumnName = "party_id")
@ManyToOne
private Party partyId;
@Column(name = "party_as_user")
private Boolean partyAsUser;
Я пытался реализовать его как объект с точечной нотацией, но это не работает:
@NamedQuery(name = "Users.findByPartyAsUser", query = "SELECT u FROM Users u WHERE u.partyAsUser = :partyAsUser AND u.partyId.partyId = :partyId")
Есть свойство под названием partyId
внутри Party
-объект, но он не работает. Есть ли какое-либо решение для этого, или я должен добавить одно свойство к bean-компоненту Users, как private int partyID
и заполнять его каждый раз, когда новый Party
вставляется в Users
?
Спасибо за помощь! Сами Нурми
1 ответ
В общем, вы можете использовать объект в качестве параметра в JPA,
SELECT u FROM Users u WHERE u.partyAsUser = :partyAsUser AND u.party = :party
Party party = new Party(id);
query.setParameter("party", party);
Но то, что у вас должно работать, если вы используете правильные имена переменных, я думаю,
SELECT u FROM Users u WHERE u.partyAsUser = :partyAsUser AND u.party.id = :id
И вы всегда можете использовать собственный SQL-запрос, если понимаете SQL лучше, чем объекты.