我有以下这些课程:
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;
}
现在,我将通过使用休眠和内部联接基于给定的请求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
我忘了一些休眠注释吗?或我的查询有问题吗?
答案 0 :(得分:0)
简要原因
您的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之后应该有一个表名,而不是列名。
这就是为什么会出错的原因,此外,在休眠状态下使用HQL代替SQL是一个好习惯。
编码愉快!