Java 命名查询未知:findById
我试图建立这个简单的项目,但我不断得到相同的错误。有人能帮我弄清楚吗 HibernateTest.javaJava 命名查询未知:findById,java,hibernate,named-query,Java,Hibernate,Named Query,我试图建立这个简单的项目,但我不断得到相同的错误。有人能帮我弄清楚吗 HibernateTest.java public class HibernateTest { public static void main(String[] args) { SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session sessio
public class HibernateTest
{
public static void main(String[] args)
{
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
UserDetails user = new UserDetails();
Query query = session.getNamedQuery("findById");
List<?> list = query.list();
if (!list.isEmpty())
{ UserDetails userD = (UserDetails) list.get(0);
System.out.println(userD); }
}
}
我不太清楚到底是什么问题,因为我在不同的项目中运行了相同的查询,并且运行良好。我遇到了相同的问题,我通过在
applicationContext.xml
中添加以下内容解决了问题
<property name="annotatedClasses">
<list>
<value>com.Employee</value>
</list>
</property>
com.Employee
如果您使用的是XML配置,则可以使用
标记定义命名查询。例如:
<query name = "findById">
<![CDATA[SELECT x FROM UserDetails x WHERE x.id = '3']]>
</query>
标记与
标记处于同一级别,作为
标记的子标记。虽然这不会解决您眼前的问题,但如果您使用的是Hibernate和JPA注释,为什么不使用EntityManager而不是Hibernate会话和其他东西呢
使用持久化单元(以及META-INF
文件夹中的Persistence.xml
),您可以执行以下操作:
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("persistenceUnit");
EntityManager em = emf.createEntityManager();
Query query = em.createNamedQuery("findById");
或者更好:
TypedQuery<UserDetails> query = em.createNamedQuery("findById", UserDetails.class);
TypedQuery query=em.createNamedQuery(“findById”,UserDetails.class);
方法大致相同(毕竟,JPA是由Hibernate组成的)。您是否验证了您的Hibernate配置是否知道
UserDetails
类?我在Hibernate.cfg.xml中有这个选项,所以。。。您正在使用XML映射而不是注释驱动的映射?!您的userdetails.hbm.xml
中是否存在命名查询?我没有。我怎么把它放进去?
TypedQuery<UserDetails> query = em.createNamedQuery("findById", UserDetails.class);