gpt4 book ai didi

hibernate - Hibernate session 工厂找不到 DAO 注释中定义的 NamedQuery

转载 作者:行者123 更新时间:2023-12-02 22:26:52 24 4
gpt4 key购买 nike

我将 Spring 与 Hibernate 一起使用。在我的 DAO 中,我定义了一个 NamedQuery, session 工厂找不到它,尽管我已将该 DAO 的包添加到 packagesToScan 中。

我的 DAO:

/**
*
*/
package org.lalala.service.mytest;

import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;


import org.lalala.objects.Unit;


@NamedQueries
({
@NamedQuery
(
name="unit.findById",
query="from Unit u where u.unitid = :unitId"
)
})
public class MyTestDaoImpl implements MyTestDao
{

private SessionFactory sessionFactory;


public MyTestDaoImpl(SessionFactory sessionFactory)
{
super();
this.sessionFactory = sessionFactory;
}



/* (non-Javadoc)
* @see org.lalala.service.mytest.MyTestDao#getRandomUnit()
*/
@Override
public Unit getRandomUnit()
{
long unitid = 2891;
try {
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();

Query query = session.getNamedQuery("unit.findById");
query.setParameter("unitId", unitid);

Unit unit = (Unit) query.uniqueResult();

session.getTransaction().commit();

return unit;
} catch (Exception e) {
System.out.println(e.getMessage());
return null;
}
}

}

这里是用于提供 session 工厂的 Spring 配置方法:

@Bean
public AnnotationSessionFactoryBean getSessionFactory() {
final AnnotationSessionFactoryBean sessionFactory = new AnnotationSessionFactoryBean ();
sessionFactory.setDataSource(getDataSource());

String[] packages = new String[]{"org.lalala.avalon.service.mytest"};

sessionFactory.setAnnotatedPackages(packages);

Properties properties = new Properties();
properties.put("hibernate.current_session_context_class", "thread");
sessionFactory.setHibernateProperties(properties);

return sessionFactory;
}

这里抛出的异常:

org.hibernate.MappingException: Named query not known: unit.findById

由于一些类似的 stackoverflow 问题,我用 JPA 等效项替换了 hibernate @NamedQuery 注释。没有帮助。

最佳答案

您必须将命名查询放在您的实体上,而不是放在 dao 上

here is an example

关于hibernate - Hibernate session 工厂找不到 DAO 注释中定义的 NamedQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7756889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com