如何在Hibernate上使用多个Join?

问题描述 投票:0回答:1

我有以下几个类:

class Person(){
   @OneToMany(mappedBy="person")
   private List<PersonRoles> roles;
}

class PersonRoles(){
   @ManyToOne
   @JoinColumn(name = "person_id", nullable = false)
   private Person person;

   @ManyToOne
   @JoinColumn(name = "request_id")
   private Request request;
}

class Request(){
   @OneToMany(mappedBy="request")
   private List<PersonRoles> roles;
}

现在我将通过使用hibernate和内部联接基于给定的请求ID和他的角色来获取所有人,但是我的日志告诉我我的表不存在。这是我目前的查询:

sql = "SELECT p.* FROM person AS p INNER JOIN p.roles ON p.roles.personId = p.id 
INNER JOIN request AS r ON p.roles.requestId = r.id AND p.roles.role like :item 
AND r.id = :id";
query = session.createSQLQuery(sql);
query.addEntity(Person.class);
query.setParameter("item", "Members");
query.setParameter("id", id);
person = (Person) query.uniqueResult();

这就是我在日志中收到的内容:

Table 'p.roles' doesn't exist

我忘记了一些hibernate注释吗?或者我的查询有问题?

java hibernate inner-join
1个回答
0
投票

简要原因

您的SQL语法错误

详细解释

这是内连接example的语法

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;

multiple inner join

SELECT * 
FROM table1 
INNER JOIN table2
      ON table1.primaryKey=table2.table1Id
INNER JOIN table3
      ON table1.primaryKey=table3.table1Id

但你已经使用过INNER JOIN p.roles,INNER JOIN之后应该有一个表名,而不是列名。

这就是为什么你得到一个错误,而且,在hibernate中使用HQL代替SQL这是一个很好的做法。

快乐的编码!

© www.soinside.com 2019 - 2024. All rights reserved.