我有一个正常工作的Web项目。然后我负责将所有的Hibernate代码从战争项目中移出并放入它自己的jar中。我将persistence.xml移到了新jar的META-INF中。Hibernnate QuerySyntaxException:用户未映射
在登录时我现在收到此错误:
java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped [from User where lower(name) = :userName]
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1679)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1608)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:294)
我可以在persistence.xml中被正确加载,并连接到数据库的日志中看到,所以我知道新的罐子正在读取休眠代码。 c3p0和mysql jar位于WEB-INF/lib目录中。我可以从mysql-workbench连接到数据库。
这个相同的代码在旧的war文件中工作,所以我知道这不是一个技术问题,如有错误的情况下,或映射到错误的表。就在我将代码拉出到另一个项目时,我将它作为一个maven依赖项, - 某些东西没有被正确读取。
任何想法?
UPDATE
试了几件事情。我将persistence.xml引入war文件的WEB-INF,META-INF,这些id不起作用的类。 (我不认为这是问题无论如何,因为它是拿起数据库的网址名称/密码。)
我发现了一个建议,使用完整的包名称的类,并发生了一些werid发生。这是代码:
List<User> users = getEntityManager().createQuery("from com.xxx.xxx.persistence.model.User where lower(name) = :userName")
.setParameter("userName", name.toLowerCase())
.getResultList();
现在我得到这个异常:
WARN 04-21 18:18:16 HHH000183: no persistent classes found for query class: from com.xxx.xxx.persistence.model.User where lower(name) = :userName (QuerySplitter.java:124)
java.lang.IllegalArgumentException: Parameter with that name [userName] did not exist
那没有持久类只是一个警告,execption显然是错误的,你可以看到我设置的参数,是的,我有一个非空值。
任何方向将是一个帮助, 谢谢
PERSISTENCE
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="sessionfactory">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.xxx.xxx.persistence.model.Role</class>
<class>com.xxx.xxx.persistence.model.User</class>
<properties>
.....
</properties>
</persistence-unit>
</persistence>
编辑
所以这很奇怪,当我硬代码名是这样的:
getEntityManager().createQuery("from com.xxx.xxx.persistence.model.User where lower(name) = 'me'")
.setParameter("userName", name.toLowerCase())
.getResultList();
我仍然得到“参数与名称不exisit”如果我完全删除:
getEntityManager().createQuery("from com.xxx.xxx.persistence.model.User where lower(name) = 'me'")
.getResultList();
我的工作(我想,但在日志中的错误是从下一个DB查询)
因此,这个entityManager必须有错(它是一个javax.persistence。EntityManager的)
能否请您尝试添加下面的持久性文件,< class >路径到你的用户类 – LearningPhase
我在那里,但没有运气 – mmaceachran
可以吗尝试将您的查询从com.xxx.xxx.pers ..更改为仅限用户 – LearningPhase