属性是对象时的命名查询?

时间:2012-04-14 23:33:40

标签: jpa eclipselink named-query

我想在JPA中进行此查询:

SELECT * FROM `happyDB`.`users` U WHERE U.party_as_user =1 AND U.party_party_id =2

这工作正常,但我的问题是我只将Party作为对象,而不是id,我无法使其正常工作。

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的属性,但它不起作用。是否有任何解决方案,或者我是否必须将一个属性添加到Users-bean,如private int partyID,并在每次将新Party插入Users时填充它?

感谢您的帮助! 萨米努尔米

1 个答案:

答案 0 :(得分: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查询。