2012-04-14 4 views
3

Я хотел бы сделать этот запрос в 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, но он не работает. Есть ли какое-либо решение для этого или мне нужно добавить одно свойство к компонентам-пользователям, как private int partyID, и заполнять его каждый раз, когда новый Party вставляется в Users?

Спасибо за помощь! Сами Нурми

+0

Какая ошибка вы получаете? Возможно, ваш партийный класс. В общем, зная партию отношений, вместо partyId будет иметь смысл. – James

ответ

9

В общем, вы можете использовать объект в качестве параметра в 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 лучше, чем объекты.

+0

Это была моя ошибка, мне даже не нужен этот идентификатор, просто объект. Это была просто глупая ошибка :(СПАСИБО! – Sami

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