【问题标题】:Named query when property is an object?属性是对象时的命名查询?
【发布时间】:2012-04-26 20:18:28
【问题描述】:

我想在 JPA 中进行此查询:

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

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

在我尝试执行命名查询的Users-entity 中,我有以下内容:

@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")

Party 对象中有一个名为partyId 的属性,但它不起作用。是否有任何解决方案,或者我是否必须向用户 bean 添加一个属性,例如 private int partyID 并在每次将新的 Party 插入到 Users 时填充它?

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

【问题讨论】:

  • 你得到什么错误?也许包括你的派对课。一般来说,调用关系方而不是 partyId 是有意义的。

标签: jpa eclipselink named-query


【解决方案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 查询。

【讨论】:

  • 那是我的错误,我什至不需要那个 id,只是对象。这只是一个愚蠢的错误:(谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-02-12
  • 2020-06-02
  • 2010-12-30
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 2021-05-16
  • 2013-07-20
相关资源
最近更新 更多