休眠命名查询不知道错误

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]]>

【讨论】:

以上是关于休眠命名查询不知道错误的主要内容,如果未能解决你的问题,请参考以下文章

使用休眠命名查询和弹簧填充 DTO 的列表属性

休眠命名查询

从 java pojo 类生成休眠查询

命名查询休眠

单表继承(休眠)的 JPA 2 标准查询

Spring中的连接错误,使用Mongodb休眠