Java Hibernate SQLGrammarException:无法准备语句…列“;非「;找不到
我有以下代码:Java Hibernate SQLGrammarException:无法准备语句…列“;非「;找不到,java,sql,hibernate,hql,Java,Sql,Hibernate,Hql,我有以下代码: @Entity @Table(name = "terminal_admin") public class TerminalAdmin { @ManyToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL) @JoinTable(name = "admin_role", joinColumns = { @JoinColumn(name = "admin_id", nullable =
@Entity
@Table(name = "terminal_admin")
public class TerminalAdmin {
@ManyToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
@JoinTable(name = "admin_role", joinColumns = {
@JoinColumn(name = "admin_id", nullable = false) },
inverseJoinColumns = { @JoinColumn(name = "role_id",
nullable = false) })
private Set<AdminRole> adminRoles;
}
terminalAdminService.findAdminByRoles(Arrays.asList(new AdminRole("TERMINAL_MODERATOR"),
new AdminRole("MODERATOR"),
new AdminRole("SUPERADMIN")))
public List<TerminalAdmin> findAdminByRoles(List<AdminRole> roles) {
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("from TerminalAdmin where adminRoles in :roles");
query.setParameter("roles", roles);
return query.list();
}
我执行以下代码:
@Entity
@Table(name = "terminal_admin")
public class TerminalAdmin {
@ManyToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
@JoinTable(name = "admin_role", joinColumns = {
@JoinColumn(name = "admin_id", nullable = false) },
inverseJoinColumns = { @JoinColumn(name = "role_id",
nullable = false) })
private Set<AdminRole> adminRoles;
}
terminalAdminService.findAdminByRoles(Arrays.asList(new AdminRole("TERMINAL_MODERATOR"),
new AdminRole("MODERATOR"),
new AdminRole("SUPERADMIN")))
public List<TerminalAdmin> findAdminByRoles(List<AdminRole> roles) {
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("from TerminalAdmin where adminRoles in :roles");
query.setParameter("roles", roles);
return query.list();
}
如何修复它?您正在直接尝试按对象进行筛选,我不确定这是否可行。您应该尝试在查询中使用
join
。比如:
from TableAdmin ta left join ta.adminRoles ar where ar.id in :roleIds
并将实际ID作为参数传递。此查询正在运行:
from TerminalAdmin ta left join ta.adminRoles ar where ar.role in (:roles)
对于此查询-
角色
应该是字符串列表罪魁祸首非限定属性引用
。找不到它的来源。@redflar3我看到了这一点,但我不知道这是什么意思我猜测发生了错误,因为您要求hibernate比较两个对象(类型为AdminRoles
)。。不确定hibernate是否能做到。。因此,它将HQL
中的adminRoles
描述为非限定属性ref
。@redflar3如何修复它?您可以尝试使用join
,如Danail Alexiev
所述,从TerminalAdmin ta left join ta.adminRoles ar where ar.role in(:roles)您没有提供连接路径