急救,hibernate问题

问题描述

首先说一下,小弟想用hibernate保存实体到数据库,但是出了一些问题,我用的sqlserver数据库,为表创建了存储过程和触发器。数据库有三个表:student,score,mark为student表创建了一个Insert触发器,当有新纪录添加到该表的时候,自动向mark表中添加一条日志信息这是我的代码1.实体l类publicclassStudentimplementsjava.io.Serializable{//FieldsprivateIntegerid;privateStringsname;privateIntegersex;privateSetscores=newHashSet(0);//Constructors/**defaultconstructor*/publicStudent(){}/**minimalconstructor*/publicStudent(Stringsname){this.sname=sname;}/**fullconstructor*/publicStudent(Stringsname,Integersex,Setscores){this.sname=sname;this.sex=sex;this.scores=scores;}publicStudent(Stringsname,Integersex){this.sname=sname;this.sex=sex;}//PropertyaccessorspublicIntegergetId(){returnthis.id;}publicvoidsetId(Integerid){this.id=id;}publicStringgetSname(){returnthis.sname;}publicvoidsetSname(Stringsname){this.sname=sname;}publicIntegergetSex(){returnthis.sex;}publicvoidsetSex(Integersex){this.sex=sex;}publicSetgetScores(){returnthis.scores;}publicvoidsetScores(Setscores){this.scores=scores;}}2.测试类:publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstub//读取并解析配置文件Configurationconf=newConfiguration().configure();//读取并解析映射文件兮兮SessionFactorysf=conf.buildSessionFactory();Sessionsession=sf.openSession();//打开sessionTransactiontx=null;try{tx=session.beginTransaction();//开始一个事务Studentstudent=newStudent("王青",Integer.valueOf(1));session.save(student);tx.commit();//提交事务}catch(Exceptione){if(tx!=null)tx.rollback();e.printStackTrace();}finally{session.close();}}3.映射文件:student.hbm.xlm<hibernate-mapping><classname="com.DAO.Student"table="student"schema="dbo"catalog="jj"><idname="id"type="java.lang.Integer"><columnname="ID"/><generatorclass="native"/></id><propertyname="sname"type="java.lang.String"><columnname="sname"length="70"not-null="true"/></property><propertyname="sex"type="java.lang.Integer"><columnname="sex"/></property><setname="scores"inverse="true"><key><columnname="sid"not-null="true"/></key><one-to-manyclass="com.DAO.Score"/></set></class></hibernate-mapping>4.映射文件:score.hbm.xml<hibernate-mapping><classname="com.DAO.Score"table="score"schema="dbo"catalog="jj"><composite-idname="id"class="com.DAO.ScoreId"><key-propertyname="id"type="java.lang.Integer"><columnname="ID"/></key-property><key-many-to-onename="student"class="com.DAO.Student"><columnname="sid"/></key-many-to-one><key-propertyname="scores"type="java.lang.Integer"><columnname="scores"/></key-property></composite-id><many-to-onename="student"class="com.DAO.Student"update="false"insert="false"fetch="select"><columnname="sid"not-null="true"/></many-to-one></class></hibernate-mapping>5.映射文件mark.hbm.xnl:<hibernate-mapping><classname="com.DAO.Mark"table="mark"schema="dbo"catalog="jj"><idname="id"type="java.lang.Integer"><columnname="id"/><generatorclass="native"/></id><propertyname="tg"type="java.lang.String"><columnname="tg"length="110"/></property><propertyname="time"type="java.util.Date"><columnname="time"length="23"/></property></class></hibernate-mapping>

解决方案

解决方案二:
为什么不贴出来错误??
解决方案三:
哦,忘了,补充一下,我的报错信息是:org.hibernate.exception.GenericJDBCException:couldnotinsert:[com.DAO.Student]atorg.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)atorg.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)atorg.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)atorg.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:1986)atorg.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2405)atorg.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:37)atorg.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)atorg.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:269)atorg.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167)atorg.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101)atorg.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)atorg.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)atorg.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)atorg.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)atorg.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)atorg.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:530)atorg.hibernate.impl.SessionImpl.save(SessionImpl.java:518)atorg.hibernate.impl.SessionImpl.save(SessionImpl.java:514)atcom.DAO.Test.main(Test.java:25)Causedby:com.microsoft.sqlserver.jdbc.SQLServerException:必须执行该语句才能获得结果。atcom.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(UnknownSource)atcom.microsoft.sqlserver.jdbc.SQLServerStatement.getGeneratedKeys(UnknownSource)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(UnknownSource)atsun.reflect.DelegatingMethodAccessorImpl.invoke(UnknownSource)atjava.lang.reflect.Method.invoke(UnknownSource)atorg.hibernate.util.GetGeneratedKeysHelper.getGeneratedKey(GetGeneratedKeysHelper.java:65)atorg.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:1970)...15more
解决方案四:
Causedby:com.microsoft.sqlserver.jdbc.SQLServerException:必须执行该语句才能获得结果。hibernate配置文件配置连接有问题好像是。连接不到数据库
解决方案五:
引用3楼lmy_java的回复:

hibernate配置文件配置连接有问题好像是。连接不到数据库

从前面的错误信息来看,数据库肯定是连上了的。错误肯定出在触发器和Hibernate的配合使用上。如果不是绕不过去,建议不要在Hibernate管理的表上使用触发器。

时间: 2024-09-10 09:43:44

急救,hibernate问题的相关文章

hibernate中用annotation注解怎么样配置TIMESTAMP类型的数据呢

问题描述 请问hibernate中用annotation注解怎么样配置TIMESTAMP类型的数据并且能自动插入和更新呢?就是相当于mysql中timeTIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP;这样的数据列,在hibernate中怎么样用annotation注解来配置呢(不要xml的配置方式).各位大虾帮帮忙啊,跪求中-- 解决方案 解决方案二:没用过注解吖.看下这个资料吧解决方案三:@Column(name="D_UP

混合Eclipse、WTP、Struts和Hibernate

使用Eclipse Web Tools Project.Tomcat应用服务器和MySQL数据库服务器,创建了一个Web应用程序.尽管该应用程序(DBTest)可能会很不错,但是也会存在一些局限性: 在servlet代码中,Java Server Pages (JSP) 名称是硬编码的 SQL也被硬编码到命令类中. 幸运的是,这些问题可以通过两种有趣的解决方案得以解决.第一个问题可通过使用开源Struts框架解决,该框架通过将模型动作映射到一个简单配置文件中的视图组件(比如JSP),从而分离应用

系统学习hibernate之三 transient、persistent、detached状态

transient.persistent.detached状态关系图如下: 1.transient状态的特征: * 在数据库中没有与之匹配的数据 * 没有纳入session的管理 2.persistent状态的特征: * persistent状态的对象在数据库中有与之匹配的数据 * 纳入了session的管理 * 在清理缓存(脏数据检查)的时候,会和数据库同步 3.detached状态的特征: * 在数据库中有与之匹配的数据 * 没有纳入session的管理 PS:了解这几种状态对深入使用hib

Hibernate流行架构浅析

本文向大家介绍Hibernate架构,可能好多人还不了解Hibernate架构,没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西. 用java来建立一个很有价值的web 应用不是一个简单的任务.在架构这个应用时要考虑很多的因素和问题.从更高的层次来看,开发人员面临着关于如何构建用户接口,何处驻留业务逻辑,以及如何实现数据持久性这些问题.这3层都有各自的问题需要回答.而每一层又需要实现那些技术?应用如何设计来进行松散耦合并能进行灵活变更?应用架构是否允许某一层变更而不影响到其它的层次?

Unitils+hibernate+Spring+PostgreSql做dao层测试遇到的错误

这两天看陈雄华的书<Spring3.0企业开发实战>17章做dao层的测试,由于使用postgreSql数据库,所以遇到了不少错误,很多问题百度都没找到答案,所以记录下来给遇到同样错误的童鞋做个参考.下面是我遇到的问题: 1.unitils目前还不支持Hibernate4,所以使用hibernate4的童鞋,要么换hibernate3要么自己用dbUnit做测试. 2.org.unitils.core.UnitilsException: Missing configuration for or

360安全卫士急救盘应该怎么使用

  在使用电脑的时候,很多原因都会造成对系统的破坏,从而使一些重要的文件丢失,那我们又不是专业的维修人员该怎么办呢,小编推荐大家使用360安全卫士急救盘,不需要复杂的操作就能完成对系统的恢复,下面小编给大家详细的介绍一下360安全卫士急救盘应该怎么使用吧,希望对大家能够有所帮助吧. 1.安装制作启动U盘 简单贴心 360急救盘的在线安装包仅有1.82M,下载完成后,插入准备好的U盘打开安装程序,选择要安装的U盘,一路点击"下一步"即可.安装程序会执行文件下载与写入,整个过程大概在5分钟

Java Persistence with Hibernate中文版Hibernate实战第2版出版

Java Persistence with Hibernate中文版Hibernate实战第2版出版 图灵出版社官方Hibernate实战(第2版)链接为: http://www.turingbook.com/Books/ShowBook.aspx?BookID=260 书 名: Hibernate实战(第2版) 评论星级: **** 书 号: 978-7-115-17448-2 原 书 名: Java Persistence with Hibernate 原出版社: Manning Publi

org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of com.*.Paper.totalTime

at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:109) at org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:586) at org.hibernate.tuple.entity.PojoEntityTuplizer.s

s2sh框架整合,hibernate无法执行删除问题

问题描述 s2sh框架整合,hibernate无法执行删除问题 dao层的代码 public void deleteDepartment(Serializable id,String delMode) { Department department=this.getDepartmentById(id); //通过页面出来的参书id,获得 这个对象 if("del_pre_relation".equals(delMode)){ Set users = department.getUser