【发布时间】:2016-04-28 13:22:32
【问题描述】:
我尝试为名称为 User 的类构建一个 findAll 查询。使用 Hibernate 的 SessionFactory 它工作正常,但使用 Hibernate 的 EntityManager 我得到一个错误。
原因似乎是MS SQL Server关键字user的escaping(带括号[和]),但是用EntityManager#persist(Object)和EntityManager#find(Class, Object)我没有问题。
堆栈跟踪:
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: [ near line 1, column 29 [select generatedAlias0 from [user] as generatedAlias0]
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:91)
at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:109)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:304)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:203)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:131)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:93)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167)
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1836)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:568)
... 103 more
代码:
@Entity(name = "[user]")
public class User {
// some properties
}
public class UserDao
@PersistenceContext
private EntityManager entityManager;
public List<User> findAll() {
CriteriaQuery<User> criteriaQuery = entityManager.getCriteriaBuilder().createQuery(User.class);
Root<User> root = criteriaQuery.from(User.class);
criteriaQuery.select(root);
return entityManager.createQuery(criteriaQuery).getResultList();
}
}
研究:
这些解决方案也不起作用。有什么方法可以在 JPA 查询中使用表名 [user] Hibernate?
【问题讨论】:
标签: java sql-server hibernate jpa