休眠命名查询不知道错误
Posted
技术标签:
【中文标题】休眠命名查询不知道错误【英文标题】:Hibernate Named query not know error 【发布时间】:2015-12-02 09:56:17 【问题描述】:我不知道为什么,但是当我将此项目导入 Eclipse 时。这很好用。
所以,我认为这是导入 InteliJ IDEA 时 eclipse 项目的问题
这并不像我想象的那么容易。
我有类 Setting 和 Setting.hbm.xml 用于映射休眠。 在这堂课中:
<hibernate-mapping>
<class name="Setting" table="setting" lazy="false">
<id name="id" column="id" type="integer">
<generator class="increment" />
</id>
.....
</class>
<query name="select.setting">
from Setting as s where s.id = ? order by s.name
</query>
现在,当我调用函数时
this.getHibernateTemplate().findByNamedQuery("select.setting", params);
这个返回错误
org.springframework.orm.hibernate4.HibernateSystemException: Named query not known: select.setting; nested exception is org.hibernate.MappingException: Named query not known: select.setting
at org.springframework.orm.hibernate4.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:218) ~[spring-orm-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.orm.hibernate4.HibernateTemplate.doExecute(HibernateTemplate.java:343) ~[spring-orm-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.orm.hibernate4.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:308) ~[spring-orm-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.orm.hibernate4.HibernateTemplate.findByNamedQuery(HibernateTemplate.java:933) ~[spring-orm-4.1.6.RELEASE.jar:4.1.6.RELEASE]
请给点建议。
【问题讨论】:
可能重复的 qtn。检查此链接***.com/questions/26084031/… 它不是重复的兄弟。请再次检查 不带点的查询名称是否给出相同的结果? (例如:“selectSetting”而不是“select.setting”)。 您是否在会话中加入了hbm
?
是的,我使用spring boot并且已经设置了映射@Bean public LocalSessionFactoryBean sessionFactory() throws Exception LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); sessionFactory.setHibernateProperties(hibernateProperties()); sessionFactory.setMappingDirectoryLocations(new ClassPathResource[] new ClassPathResource("data/model") );
【参考方案1】:
你可以试试这个。
<query name="select.setting">
<![CDATA[from Setting as s where s.id = ? order by s.name]]>
</query>
【讨论】:
【参考方案2】:XML 解析器对您没有使用 CDATA 标记感到困惑。 CDATA 是告诉框架它的数据不应被解释为标记的方式。
因此正如@Lovababu 提到的,在 CDATA 标签中包含查询:
<query name="select.setting">
<![CDATA[from Setting as s where s.id = ? order by s.name]]>
【讨论】:
以上是关于休眠命名查询不知道错误的主要内容,如果未能解决你的问题,请参考以下文章