Именованный запрос, когда свойство является объектом?

Я хотел бы сделать этот запрос в 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 лучше, чем объекты.

Другие вопросы по тегам