`
run_wang
  • 浏览: 169516 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

hibernate心得

阅读更多
org.hibernate.exception.ConstraintViolationException: could not insert

org.hibernate.exception.ConstraintViolationException: could not insert

报错原因: generator id设置问题

hibernate的映射文件bean.hbm.xml是跟库表一一对应的,如果库表中存在主键,需要自动生成就用native,有时需要在我们insert时就给他赋值,用assigned。

example:



如果是要让他自动生成的话用如下:

   <id name="id" type="java.lang.Integer">
            <column name="ID" />
            <generator class="native"></generator>
    </id>

insert时需要为主键赋值如下:

   <id name="id" type="java.lang.String">
            <column name="ID"  />
            <generator class="assigned"></generator>
    </id>



因为采用了native的方法,底层数据库会自动生成一个long,short或者是int,如果ID设计的是用String,所以数据库无法插入的,所以如果你的数据库的ID设计的是用String型的,最好是用assinged.
<generator class=""></generator> 可以不要...




第一次Hibernate之旅经验总结 

1.错误提示:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/persistence/EntityListeners
at org.hibernate.cfg.annotations.reflection.JPAMetadataProvider.getDefaults(JPAMetadataProvider.java:96)
at org.hibernate.annotations.common.reflection.java.JavaReflectionManager.getDefaults(JavaReflectionManager.java:226)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1355)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1826)
at StudentTest.main(StudentTest.java:17)

原因:没有引入hibernate-distribution-3.6.0.Final\lib\jpa下面的hibernate-jpa-2.0-api-1.0.0.Final.jar



2.错误提示:

Hibernate: insert into Student (name, age, id) values (?, ?, ?)
Exception in thread "main" org.hibernate.SessionException: Session was already closed
at org.hibernate.impl.SessionImpl.close(SessionImpl.java:320)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:589)
at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:344)
at $Proxy0.close(Unknown Source)
at StudentTest.main(StudentTest.java:22)

原因:在程序中有这么一句Session session = sf.getCurrentSession();将其改为Session session = sf.openSession();问题解决,或者用if(session.isOpen())判断一下,具体原因不是很清楚,读者可以参考http://rmn190.javaeye.com/blog/370864


3.错误提示:

Hibernate: insert into Student (name, age, id) values (?, ?, ?)
Exception in thread "main" org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:268)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
at StudentTest.main(StudentTest.java:21)
Caused by: java.sql.BatchUpdateException: Duplicate entry '7' for key 'PRIMARY'
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1693)
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1108)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
... 8 more

错误原因:主键的值不能重复,数据表中id=7的数据已经存在,所以导致插入数据失败!




4.错误提示(使用Session session = sf.getCurrentSession()):

Exception in thread "main" org.hibernate.HibernateException: No CurrentSessionContext configured!
at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:683)
at StudentTest.main(StudentTest.java:18)

错误原因:从3.0.1版本开始,Hibernate增加了 SessionFactory.getCurrentSession()方法。一开始,它假定了采用 JTA事务, JTA事务定义了当前session的范围和上下文(scope and context)。

错误主要原因是在hibernate.cfg.xml文件中忘记进行了如下设置:hibernate.current_session_context_class

如果是在web容器中运行hibernate,则在hibernate.cfg.xml中加入这句话:

<propertyname="hibernate.current_session_context_class">jta</property>

如果是在一个单独的需要进行JDBC连接的javaapplication中运行hibernate,则这样设置:

<propertyname="hibernate.current_session_context_class">thread</property>
分享到:
评论

相关推荐

    Hibernate学习心得

    本篇文章将基于标题"Hibernate学习心得"和提供的压缩包文件,深入探讨Hibernate的相关知识点。 首先,让我们从Hibernate的基础开始。`Hibernate第一章.txt`可能涵盖了这一主题。Hibernate是一个Object-Relational ...

    struts\Hibernate 学习总结.doc

    Struts和Hibernate是Java开发中两个非常重要的框架,它们分别关注于Web应用的MVC(Model-View-Controller)架构的实现和数据持久化的处理。 Struts是一个经典的MVC框架,它帮助开发者将业务逻辑、用户界面和数据...

    hibernate的使用心得

    在本文中,我们将深入探讨Hibernate的使用心得,特别是关注HQL(Hibernate Query Language)查询的技巧和优化策略。HQL是Hibernate框架中用于操作对象关系映射的SQL方言,它允许开发者以面向对象的方式来编写查询,...

    hibernate学习心得

    Hibernate 是一个流行的对象关系映射(ORM)框架,它允许开发者使用 Java 对象来操作数据库,而无需直接编写 SQL 查询。对于初学者来说,学习 Hibernate 可以简化数据库操作,提高开发效率。以下是对 Hibernate 学习...

    Hibernate_二级缓存 实验心得,手册

    ### Hibernate 二级缓存实验心得与手册 #### 一、二级缓存概述 在学习Hibernate的过程中,二级缓存是一个非常重要的概念。与一级缓存不同的是,一级缓存默认为每个`Session`开启,用于存储当前`Session`内的实体...

    \hibernate操作心得.doc

    Hibernate 操作心得包括了建立 Java 项目、创建 Hibernate 库、导入用户库、加入 MySQL 驱动、创建数据库、创建 Java 类、配置 hibernate.cfg.xml 文件、创建 hbm.xml 文件、配置测试文件等多个步骤。通过这些步骤,...

    hibernate映射心得 原创

    **标题解析:**“hibernate映射心得 原创” 这个标题表明了本文将主要探讨作者在使用Hibernate框架进行对象关系映射(ORM)时的个人理解和经验。Hibernate是一个流行的Java ORM框架,它允许开发者用面向对象的方式...

    Hibernate学习心得源码

    Hibernate是Java领域中一款广泛应用的关系对象映射框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据库。在Hibernate的学习过程中,源码分析是非常重要的一环,可以帮助我们深入理解其工作原理...

    基于hibernate的简单留言本

    【hibernate简介】 Hibernate是一个开源的Java框架,主要用于简化企业级应用中的对象关系映射(Object-Relational Mapping,ORM)。它允许开发者将数据库操作转换为对Java对象的操作,从而降低了开发人员处理SQL和...

    hibernate笔记心得

    在本文中,我们将重点讨论通过注解方式使用Hibernate的心得体会。 在使用Hibernate进行开发时,注解是必不可少的一部分。`@Entity`注解用于标记一个Java类为实体类,这意味着该类将与数据库中的一个表相对应。如果...

    Apress - Pro Hibernate3

    - **社区交流**:加入相关的技术论坛或社区,与其他开发者交流心得,解决遇到的问题。 总之,《Pro Hibernate3》不仅是一本介绍Hibernate的书籍,更是帮助程序员深入理解对象关系映射技术和Hibernate框架的重要参考...

    struts+hibernate实现在线音乐系统源码

    4. **论坛模块**:用户可以在论坛上讨论音乐、分享心得。这可能涉及到帖子、评论、用户资料等实体,以及相关的论坛功能如搜索、回复、点赞等。 **源码学习价值** 这个在线音乐系统的源码对于初学者和开发者来说具有...

    SpringMVC+hibernate+spring实现增删改查

    在IT行业中,Web应用开发是不可或缺的一部分,而SpringMVC、Hibernate和Spring这三大框架的组合,是构建高效、稳定且可维护的企业级应用的常用技术栈。它们各自扮演着不同的角色,共同助力于实现数据的增删改查...

    hibernatetools文档

    - **社区论坛**:用户可以在论坛中交流心得、解决问题。 - **示例项目**:官方提供的示例项目有助于理解如何使用这些工具。 #### 二、下载与安装 **Hibernate Tools**的安装主要分为以下几个步骤: ##### 2.1 ...

    轻量级 J2EE 企业应用实战:Struts+Spring+Hibernate 整合开发(二)

    学习Spring Struts Hibernate 整合开发必看的书

    Spring+struts2+hibernate框架整合

    "Spring+Struts2+Hibernate框架整合"是Java Web开发领域中的一种常见架构模式,它结合了Spring的依赖注入、AOP(面向切面编程)、事务管理,Struts2的MVC(模型-视图-控制器)设计模式,以及Hibernate的对象关系映射...

Global site tag (gtag.js) - Google Analytics