最近用webwork和hibernate做开发,遇到一个超奇怪的问题,我甚至怀疑是hibernate的一个bug!做了一个用户注册功能,用TableMember对象保存用户的信息,由于要有密码提示问题和答案及找回密码的功能,TableMember和TUserQuestion为多对一的关系。在sql server2000数据库下一切正常;拿到linux的pgsql下发生了问题。问题发生在我用hibernate的saveOrUpdate()方法保存TableMember对象时,发生的错误如下:
[code]
2007-07-13 09:19:43,471 WARN [org.hibernate.util.JDBCExceptionReporter] - <SQL Error: 0, SQLState: null>
2007-07-13 09:19:43,471 ERROR [org.hibernate.util.JDBCExceptionReporter] - <Batch entry 0 insert into com_crazyasp_rights_Member (userid, questionId, answer, username, uib_sex, uib_nickname, uib_realname, uib_birthday, uib_homeland, uib_height, uib_weigth, uib_tel, uib_mobile, uib_qq, uib_msn, uib_image, uib_email, uib_identity, uib_postalCode, uib_address, motto, id) values ( was aborted. Call getNextException() to see the cause.>
2007-07-13 09:19:43,471 WARN [org.hibernate.util.JDBCExceptionReporter] - <SQL Error: 0, SQLState: 42703>
2007-07-13 09:19:43,472 ERROR [org.hibernate.util.JDBCExceptionReporter] - <错误: 关系 "com_crazyasp_rights_member" 的 "questionid" 字段不存在
><o:p> </o:p>
2007-07-13 09:19:43,474 ERROR [org.hibernate.event.def.AbstractFlushingEventListener] - <Could not synchronize database state with session>
org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:59)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:181)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:226)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:136)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:274)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:730)
at org.springframework.orm.hibernate3.HibernateTemplate$29.doInHibernate(HibernateTemplate.java:815)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:366)
at org.springframework.orm.hibernate3.HibernateTemplate.flush(HibernateTemplate.java:813)
at com.crazyasp.common.TableOption.save(TableOption.java:175)
补充一下:TableOption.java的175行就是hibernate的saveOrUpdate()方法!
[/code]
最直接的错误信息为:<错误: 关系 "com_crazyasp_rights_member" 的 "questionid" 字段不存在,而事实上,数据表com_crazyasp_rights_member中有一个字段是questionId,注意I是大写的;当然映射文件中写的也是column=”questionId”,问题是为什么会出来这样的错误,questionid是哪里来的!
我没有办法,把数据库里的questionId字段强行改成了questionid字段,而映射文件里仍然写的是questionId,但这个问题就消失了!真搞不明白,为什么hibernate映射文件里写questionId到了pg数据库里就变成了questionid,等大家一起探讨吧!
分享到:
- 2007-07-13 16:14
- 浏览 2080
- 评论(1)
- 论坛回复 / 浏览 (1 / 2697)
- 查看更多
相关推荐
- **saveOrUpdate()**: 自动判断对象状态,如果对象是瞬时的,则调用 `save()`,如果是脱管的,则调用 `update()`,避免了可能出现的重复记录问题。 - **merge()**: 将脱管对象的状态合并到当前的持久化上下文中,...
在Java的持久化框架Hibernate中,Blob和Clob对象是用来处理大数据类型的,它们分别对应数据库中的BLOB(Binary Large Object)和CLOB(Character Large Object)。这篇文章将详细讲解如何在Hibernate中保存这两种...
然而,有时候在使用Hibernate的过程中,可能会遇到一些问题,比如由JBoss Tools生成的XML文件出现bug。这个问题可能涉及到多个方面,包括XML文件的语法错误、配置错误或者是工具自身的兼容性问题。下面将详细探讨...
Hibernate对象的生命周期 Hibernate对象的生命周期 Hibernate对象的生命周期
标题中的"hibernate保存不到数据1"是一个关于Hibernate框架在尝试保存数据到数据库时遇到问题的场景。描述提到了一个具体的解决方案,即通过在`hibernate.cfg.xml`配置文件中设置`connection.autocommit`属性为`true...
《精通Hibernate:Java对象持久化详解》是一本深入解析Hibernate技术的专著,它主要针对Java开发者,旨在帮助他们理解和掌握Java对象持久化的精髓。Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了...
在Hibernate中,持久化对象是指具有与数据库表相对应状态的Java对象。一旦一个对象被持久化,它就处于Hibernate的管理之下,其生命周期将与数据库记录绑定。Hibernate提供了四种对象状态:瞬时态、持久态、脱管态和...
总的来说,仿照Hibernate动态生成SQL保存对象是一个涉及反射、注解解析、SQL构造等多个技术领域的综合实践。通过这样的方式,你可以创建一个更加灵活且适应性强的ORM框架,满足特定项目的需求。然而,需要注意的是,...
- 当使用`new`关键字创建一个新的Java对象时,该对象是瞬时的。这意味着它们与数据库没有任何关联。如果对象不再被引用,它们会被垃圾回收器回收。瞬时对象不处于任何Session的缓存中,数据库中也没有对应的记录。...
《精通Hibernate:Java对象持久化技术详解》这本书深入剖析了Hibernate这一流行的Java对象关系映射(ORM)框架,旨在帮助开发者全面理解并熟练掌握Hibernate的使用。Hibernate是Java开发中的重要工具,它简化了...
Hibernate对象关系映射一对多 很基础等文档
1. **Hibernate基本概念**:理解什么是ORM,以及Hibernate如何解决对象和关系数据库之间的映射问题。了解实体类、持久化属性、主键、对象状态等基本术语。 2. **配置与环境搭建**:学习如何配置Hibernate,包括...
hibernate中session对象的状态详解
2. **Session接口**:它是Hibernate的主要工作接口,负责对象的加载、保存、更新和删除等操作,提供了事务管理和缓存机制。 3. **Criteria查询**:提供了一种动态构建SQL查询的方式,无需编写硬编码的SQL语句,增强...
然而,实际上,通过适当的技术手段,我们可以有效地解决Hibernate在批量处理时可能出现的性能问题。以下是一些关于如何在Hibernate环境下优化批量数据处理的策略。 首先,了解问题的根源。在上述例子中,当尝试向...
在Java的持久化框架Hibernate中,对象存在三种不同的状态,分别是持久态(Persistent)、自由态(Transient)和游离态(Detached)。这三种状态分别对应了对象与数据库的关联程度,理解它们对于高效地使用Hibernate...
`Session`对象是与数据库进行交互的接口,类似于JDBC中的Connection。`HibernateSessionFactory`通常在应用启动时初始化一次,然后在整个应用生命周期中复用,以提高性能。创建`SessionFactory`通常涉及配置...