java - Hibernate HQL "Path expected for join!"@ManyToOne 关系

标签 java sql hibernate jpa hql

假设有两个实体 - 所有者

@Entity
@NamedQueries({
   @NamedQuery(name = "Owner.findOwnerForPetId", query = "select o from Owner o inner join Pet p on o.ownerId=p.owner.ownerId where p.petId= :petId")
})
public class Owner {

  @Id
  @Column(name = "ownerId")
  private Long ownerId;

  @Column
  private String name;

  // scaffolding code...
}

和宠物

@Entity
public class Pet {

  @Id
  @Column(name = "petId")
  private Long petId;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "ownerId")
  private Owner owner;

  @Column
  private String name;

  // scaffolding code...
}

其中一位Owner可以拥有多只宠物(原来的类已重命名),但一只Pet只能属于一位Owner。我想做的是找到拥有某个 ID 的宠物的主人,例如:

select Owner.ownerId, Owner.name from Owner inner join Pet on Owner.ownerId=Pet.ownerId where Pet.petId=3;

在纯 SQL 中执行时效果很好。但是,我在 HQL 中尝试了这两个查询,它们都给出了错误 Path expected for join!

select o from Owner o inner join Pet p on o.ownerId=p.owner.ownerId where p.petId= :petId

from Owner o join Pet p where p.petId= :petId

请注意,没有 @OneToManyCollection<Pet> pets在业主.我只想用@ManyToOne来做到这一点在宠物方面。

关于我错过了什么的任何提示吗?

最佳答案

试试这个

  select o from Pet p inner join p.owner o where p.petId= :petId

关于java - Hibernate HQL "Path expected for join!"@ManyToOne 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42554440/

相关文章:

java - 服务方法参数、对象标识符与对象引用

java - java 桌面中的 session

Java JDBC Sql 错误索引超出范围

sql - 计算总记录与状态

SQLite 删除表别名

MYSQL - 错误代码 : 1242. 子查询返回多于 1 行

java - Spring JPA中无法使用多线程从多个数据库中删除数据

java - 以编程方式在 Hibernate 中设置数据库 url/用户/密码

java - Maven 问题 - 依赖关系(未找到类异常)

java - 如何在 hibernate 中的多对一映射上定义反向级联删除