我有以下几个类:
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注释吗?或者我的查询有问题?
简要原因
您的SQL语法错误
详细解释
这是内连接example的语法
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
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这是一个很好的做法。
快乐的编码!