`

Hql技巧积累之二:hbm.xml文件中经常犯的错

    博客分类:
  • SSH
阅读更多
Hibernate使用了*.hbm.xml来进行数据库表与java中的实体类的映射,例如:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    
<hibernate-mapping>
<class name="com.liany.mis.perm.orgchart.model.OrgChart" table="ORG_CHART">
    <id name="id" type="java.lang.String" column="ID">
		<generator class="uuid.hex" />
    </id>
   <property
        name="orgCode"
        type="java.lang.String"
        column="ORGCODE"
        length="50"
    />
   <property
        name="orgName"
        type="java.lang.String"
        column="ORGNAME"
        length="200"
    />

</class>

<query name="getAllOrgCharts">
	from OrgChart c 
	order by c.treeCode
</query>
<query name="checkIsDuplicate">
	<![CDATA[
	select count(c.id) from OrgChart c
	where (:id is null or c.id<>:id)
	and c.orgCode=:orgCode
	]]>
</query>
</hibernate-mapping>




用<query>元素来声明hql语句,这外query中的name是全局性的,一旦别的query的name属性与之重名,tomcat服务器在启动时就会报错,这个错误是比较难发现的。 本人犯错的例子:

2011-05-15 15:02:13 ERROR ContextLoader:211 - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean wit
h name 'dictService' defined in file [D:\projects2\mis\war\WEB-INF\classes\com\l
iany\mis\common\dict\mis-spring-dict.xml]: Cannot resolve reference to bean 'dic
tServiceImpl' while setting bean property 'target'; nested exception is org.spri
ngframework.beans.factory.BeanCreationException: Error creating bean with name '
dictServiceImpl' defined in file [D:\projects2\mis\war\WEB-INF\classes\com\liany
\mis\common\dict\mis-spring-dict.xml]: Cannot resolve reference to bean 'dictDAO
' while setting bean property 'dictDAO'; nested exception is org.springframework
.beans.factory.BeanCreationException: Error creating bean with name 'dictDAO' de
fined in file [D:\projects2\mis\war\WEB-INF\classes\com\liany\mis\common\dict\mi
s-spring-dict.xml]: Cannot resolve reference to bean 'sessionFactory' while sett
ing bean property 'sessionFactory'; nested exception is org.springframework.bean
s.factory.BeanCreationException: Error creating bean with name 'sessionFactory'
defined in file [D:\projects2\mis\war\WEB-INF\classes\com\toone\ipms\ipms-spring
-global.xml]: Initialization of bean failed; nested exception is org.hibernate.D
uplicateMappingException: Duplicate query mapping checkIsDuplicate
org.springframework.beans.factory.BeanCreationException: Error creating bean wit
h name 'dictServiceImpl' defined in file [D:\projects2\mis\war\WEB-INF\classes\c
om\liany\mis\common\dict\mis-spring-dict.xml]: Cannot resolve reference to bean
'dictDAO' while setting bean property 'dictDAO'; nested exception is org.springf
ramework.beans.factory.BeanCreationException: Error creating bean with name 'dic
tDAO' defined in file [D:\projects2\mis\war\WEB-INF\classes\com\liany\mis\common
\dict\mis-spring-dict.xml]: Cannot resolve reference to bean 'sessionFactory' wh
ile setting bean property 'sessionFactory'; nested exception is org.springframew
ork.beans.factory.BeanCreationException: Error creating bean with name 'sessionF
actory' defined in file [D:\projects2\mis\war\WEB-INF\classes\com\toone\ipms\ipm
s-spring-global.xml]: Initialization of bean failed; nested exception is org.hib
ernate.DuplicateMappingException: Duplicate query mapping checkIsDuplicate
org.springframework.beans.factory.BeanCreationException: Error creating bean wit
h name 'dictDAO' defined in file [D:\projects2\mis\war\WEB-INF\classes\com\liany
\mis\common\dict\mis-spring-dict.xml]: Cannot resolve reference to bean 'session
Factory' while setting bean property 'sessionFactory'; nested exception is org.s
pringframework.beans.factory.BeanCreationException: Error creating bean with nam
e 'sessionFactory' defined in file [D:\projects2\mis\war\WEB-INF\classes\com\too
ne\ipms\ipms-spring-global.xml]: Initialization of bean failed; nested exception
 is org.hibernate.DuplicateMappingException: Duplicate query mapping checkIsDupl
icate
org.springframework.beans.factory.BeanCreationException: Error creating bean wit
h name 'sessionFactory' defined in file [D:\projects2\mis\war\WEB-INF\classes\co
m\toone\ipms\ipms-spring-global.xml]: Initialization of bean failed; nested exce
ption is org.hibernate.DuplicateMappingException: Duplicate query mapping checkI
sDuplicate
org.hibernate.DuplicateMappingException: Duplicate query mapping checkIsDuplicat
e
        at org.hibernate.cfg.Mappings.checkQueryExist(Mappings.java:270)
        at org.hibernate.cfg.Mappings.addQuery(Mappings.java:259)
        at org.hibernate.cfg.HbmBinder.bindNamedQuery(HbmBinder.java:2596)
        at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:160)
        at org.hibernate.cfg.Configuration.add(Configuration.java:688)
        at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:523
)
        at org.springframework.orm.hibernate3.LocalSessionFactoryBean.afterPrope
rtiesSet(LocalSessionFactoryBean.java:683)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1099)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.createBean(AbstractAutowireCapableBeanFactory.java:400)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:144)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver
.resolveReference(BeanDefinitionValueResolver.java:182)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver
.resolveValueIfNecessary(BeanDefinitionValueResolver.java:105)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1054)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.populateBean(AbstractAutowireCapableBeanFactory.java:863)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.createBean(AbstractAutowireCapableBeanFactory.java:382)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:144)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver
.resolveReference(BeanDefinitionValueResolver.java:182)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver
.resolveValueIfNecessary(BeanDefinitionValueResolver.java:105)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1054)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.populateBean(AbstractAutowireCapableBeanFactory.java:863)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.createBean(AbstractAutowireCapableBeanFactory.java:382)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:144)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver
.resolveReference(BeanDefinitionValueResolver.java:182)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver
.resolveValueIfNecessary(BeanDefinitionValueResolver.java:105)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1054)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.populateBean(AbstractAutowireCapableBeanFactory.java:863)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.createBean(AbstractAutowireCapableBeanFactory.java:382)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:144)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.
preInstantiateSingletons(DefaultListableBeanFactory.java:277)
        at org.springframework.context.support.AbstractApplicationContext.refres
h(AbstractApplicationContext.java:321)
        at org.springframework.web.context.support.AbstractRefreshableWebApplica
tionContext.refresh(AbstractRefreshableWebApplicationContext.java:139)
        at org.springframework.web.context.ContextLoader.createWebApplicationCon
text(ContextLoader.java:252)
        at org.springframework.web.context.ContextLoader.initWebApplicationConte
xt(ContextLoader.java:190)
        at org.springframework.web.context.ContextLoaderListener.contextInitiali
zed(ContextLoaderListener.java:49)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContex
t.java:3934)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4
429)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase
.java:791)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:77
1)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)

        at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.ja
va:630)
        at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.j
ava:556)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491
)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java
:314)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl
eSupport.java:119)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)

        at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)

        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443
)
        at org.apache.catalina.core.StandardService.start(StandardService.java:5
16)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:710
)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
2011-5-15 15:02:13 org.apache.catalina.core.StandardContext start
严重: Error listenerStart
2011-5-15 15:02:13 org.apache.catalina.core.StandardContext start



其中之一很多错误产生的stacktrace信息,基本是误导人的, 某段的最后一句才是有用的:
nested exce
ption is org.hibernate.DuplicateMappingException: Duplicate query mapping checkI
sDuplicate


因为这个,花了不少时间查问题, 所以有必要花点时间写这篇文字来记录一下,以免将来还陷进去。

查了一下,果然有多个同名的query声明:











  • 大小: 12 KB
0
2
分享到:
评论

相关推荐

    Hibernate关联关系hbm.xml中的相关属性

    在hbm.xml文件中,我们可以使用`&lt;many-to-one&gt;`, `&lt;one-to-many&gt;`, 和 `&lt;many-to-many&gt;`标签来定义这些关联。下面将详细介绍这三个标签及其相关属性。 首先,我们来看`&lt;many-to-one&gt;`标签,它表示多对一的关系。...

    NHibernate实例代码 三种hbm.xml加载方式

    在 NHibernate 中,`hbm.xml` 文件是用于定义对象和数据库表之间映射的关键文件。本实例代码详细介绍了三种不同的 `hbm.xml` 加载方式,这对于理解和使用 NHibernate 进行数据持久化至关重要。 1. **文档直接引用**...

    Hibernate4的全套jar包,及hbm.xml(模板)+hibernate.cfg.xml(模板)+c3p0(全套)+ojdbc14.jar

    【标题】中的“Hibernate4的全套jar包”指的是Hibernate框架的完整依赖库,这通常包括了Hibernate核心库、ORM映射、查询语言(HQL)、工具类和其他必要的支持库。这些jar包使得开发者能够利用Hibernate在Java应用中...

    零基础学Java.Web开发:JSP.Servlet.Struts.Spring.Hibernate.Ajax(PPT)

    学习Hibernate意味着理解实体类、映射文件(hibernate.cfg.xml和.hbm.xml)、Session工厂和Session接口的使用。 6. **Ajax** Ajax(Asynchronous JavaScript and XML)是一种创建交互式Web应用的技术,允许部分...

    Hibernate错误及解决办法集合

    2. **检查映射文件**:确认`XXX.hbm.xml`映射文件中的字段名与数据库表中的字段名一致。 通过以上分析和解决方案,可以有效地解决Hibernate开发过程中常见的错误,提高开发效率和系统的稳定性。

    java持久化工具类:JavaBean与XML

    2. **映射文件**:定义Java对象和数据库表之间的映射关系,如Hibernate的`hbm.xml`文件,它指定了实体类与数据库表的对应字段及约束。 ### Hibernate Hibernate是一个流行的Java ORM框架,它简化了Java应用程序与...

    SSH三大框架整合 struts2(使用xml配置)+hibernate(使用xml配置)+spring(使用xml配置)

    它通过实体类和映射文件(hibernate.cfg.xml及.hbm.xml)将对象与数据库表关联起来。在XML配置文件中,我们指定数据源、连接池、实体类和表的映射关系。此外,使用SessionFactory和Session对象,我们可以方便地执行...

    Hibernate HQL详解.docx

    命名查询将HQL语句写在`.hbm.xml`配置文件中,如`&lt;query name="queryUserRange"&gt;`,这提高了代码的可维护性。在Java代码中,可以通过`session.getNamedQuery("queryUserRange")`调用。 理解并熟练运用这些HQL特性...

    Hibernate调用配置文件中的sql语句

    2. **创建SQL查询**:在映射文件(.hbm.xml)中,我们可以为实体类定义一个或多个`&lt;sql-query&gt;`标签来存放自定义SQL。例如: ```xml &lt;return class="com.example.User"/&gt; SELECT * FROM users WHERE age = {...

    hibernate3.3.2所有jar包及xml配置文件

    7. dom4j.jar:XML解析库,Hibernate使用它来处理XML配置文件和HQL查询结果。 8. slf4j-api.jar和slf4j-log4j12.jar:日志框架接口和适配器,用于记录Hibernate的日志信息。 9. jandex.jar:元数据索引库,用于处理...

    hibernate3.2+cglib2.2架包

    2. **映射文件**:使用Hibernate的XML映射文件(`.hbm.xml`)或注解将Java类与数据库表关联起来。 3. **Session**:作为主要的持久化接口,`Session`负责保存、更新、删除和检索对象。每次数据库交互都应在Session...

    简单的HIBERNATE应用

    - 映射文件:在.hbm.xml文件中,详细定义实体类与数据库表的字段对应关系。 - SessionFactory的创建:使用Configuration对象加载配置文件,创建SessionFactory实例。 - 数据操作:通过SessionFactory获取Session...

    NHibernate-2.1.0.rar

    这通过XML配置文件(如hibernate.cfg.xml和.hbm.xml文件)或使用Fluent NHibernate的代码配置来实现。 2. **会话管理**:NHibernate提供了一种称为Session的机制,它作为应用程序与数据库交互的短暂工作单元。...

    s2sh三层框架完整搭建

    接着,配置Hibernate的持久化层,创建实体类、映射文件(hbm.xml)和配置文件(hibernate.cfg.xml),并使用SessionFactory来管理数据库会话。最后,将Spring整合进来,通过XML配置或注解实现依赖注入,管理Action、...

    Hibernate使用技巧共2页.pdf.zip

    2. **实体类与映射文件**:设计和编写实体类,对应数据库中的表,并通过Hibernate的XML映射文件(.hbm.xml)或注解来定义对象关系映射。 3. **CRUD操作**:学习如何使用Hibernate进行创建(Create)、读取(Read)...

    hibernate3.6框架中文文档

    4. **映射文件(Mapping Files)**: 通过.hbm.xml文件,你可以定义实体类和数据库表之间的映射关系,包括字段、类型和约束。 5. **SessionFactory**: SessionFactory是线程安全的,负责创建Session实例,它是...

    struts+hibernate开发的项目源代码集合

    它通过配置文件(hibernate.cfg.xml)和映射文件(.hbm.xml)定义了Java对象与数据库表之间的映射关系,使得数据操作更加便捷。 **Struts与Hibernate的整合** 将Struts与Hibernate整合,可以实现更高效的数据访问和...

    SSH2项目整合

    通过配置文件(hibernate.cfg.xml)设置数据库连接参数,并通过实体类(POJOs)和映射文件(hbm.xml)将Java对象与数据库表关联。Hibernate提供了CRUD(创建、读取、更新、删除)操作,以及查询语言HQL,使得数据库...

    hibernate查询语言--HQL

    在Hibernate配置中,`.hbm.xml` 文件是映射文件,用于定义Java类和数据库表之间的映射关系。`Student.hbm.xml` 可能包含如下内容,定义了`Student`类与数据库中的`student`表的对应: ```xml &lt;class name="com....

Global site tag (gtag.js) - Google Analytics