【IT专家】关于org.hibernate.exception.SQLGrammarException- could not insert:

合集下载

hibernate的基本用法

hibernate的基本用法

hibernate的基本用法Hibernate是一个开源的Java框架,用于简化数据库操作。

它为开发人员提供了一个更加简单、直观的方式来管理数据库,同时也提高了应用程序的性能和可维护性。

本文将逐步介绍Hibernate的基本用法,包括配置、实体映射、数据操作等。

一、配置Hibernate1. 下载和安装Hibernate:首先,我们需要下载Hibernate的压缩包并解压。

然后将解压后的文件夹添加到Java项目的构建路径中。

2. 创建Hibernate配置文件:在解压后的文件夹中,可以找到一个名为"hibernate.cfg.xml"的文件。

这是Hibernate的主要配置文件,我们需要在其中指定数据库连接信息和其他相关配置。

3. 配置数据库连接:在"hibernate.cfg.xml"文件中,我们可以添加一个名为"hibernate.connection.url"的属性,用于指定数据库的连接URL。

除此之外,还需要指定数据库的用户名和密码等信息。

4. 配置实体映射:Hibernate使用对象关系映射(ORM)来将Java类映射到数据库表。

我们需要在配置文件中使用"mapping"元素来指定实体类的映射文件。

这个映射文件描述了实体类与数据库表之间的对应关系。

二、实体映射1. 创建实体类:我们需要创建一个Java类,用于表示数据库中的一行数据。

这个类的字段通常与数据库表的列对应。

同时,我们可以使用Hibernate提供的注解或XML文件来配置实体的映射关系。

2. 创建映射文件:可以根据个人喜好选择使用注解还是XML文件来配置实体类的映射关系。

如果使用XML文件,需要创建一个与实体类同名的XML文件,并在其中定义实体类与数据库表之间的映射关系。

3. 配置实体映射:在配置文件中,我们需要使用"mapping"元素来指定实体类的映射文件。

hibernate sql拼接原理

hibernate sql拼接原理

Hibernate SQL拼接原理1. 什么是HibernateHibernate是一个开源的Java持久化框架,它提供了一个对象关系映射(Object-Relational Mapping,ORM)的解决方案,用于将Java对象与关系数据库进行映射。

通过Hibernate,我们可以使用面向对象的方式来操作数据库,而不需要直接编写SQL语句。

Hibernate采用了一种称为“延迟加载”的机制,它会在需要访问数据时才去执行SQL查询。

这种机制可以提高性能,并且使得开发者可以将更多的精力放在业务逻辑上。

2. Hibernate SQL拼接原理在使用Hibernate时,我们通常使用HQL(Hibernate Query Language)或者Criteria API来查询数据。

这些查询语言会被转换成对应的SQL语句,并由Hibernate执行。

2.1 HQL和SQLHQL是一种面向对象的查询语言,它类似于SQL但具有更高级的特性。

例如,HQL支持继承、多态、关联等概念,并且可以直接操作Java对象而不需要关心底层数据库表结构。

当我们使用HQL进行查询时,Hibernate会将HQL语句转换成对应的SQL语句,并通过JDBC驱动执行SQL查询。

这个过程包括两个阶段:解析和执行。

2.2 解析阶段在解析阶段,Hibernate会对HQL语句进行语法分析,并根据查询条件生成对应的SQL查询。

这个过程包括以下几个步骤:2.2.1 解析HQL语句首先,Hibernate会将HQL语句解析成一个抽象的查询树(Query Tree)。

这个查询树表示了HQL语句的结构和含义。

例如,对于以下的HQL语句:String hql = "from Employee e where = :deptName";Hibernate会解析成如下的查询树:SELECTeFROMEmployee eWHERE = :deptName2.2.2 解析实体和属性接下来,Hibernate会解析查询树中的实体和属性,并将它们映射到数据库表和列。

hibernate sql写法

hibernate sql写法

hibernate sql写法Hibernate是一个开源的、高效的、强大的Java持久化框架,它提供了面向对象的方式来操作关系型数据库。

使用Hibernate,开发者可以以一种简单、灵活的方式进行数据库操作,而无需编写大量的SQL 语句。

在Hibernate中,我们可以通过编写映射文件或注解来定义实体类与数据库表之间的映射关系,通过Session对象来执行对数据库的操作。

在Hibernate中,SQL语句可以通过多种方式来编写。

下面将针对Hibernate中的SQL编写进行详细介绍。

1. HQL(Hibernate Query Language)Hibernate Query Language(HQL)是一种面向对象的查询语言,它类似于SQL语句,但是使用的是实体类和属性名,而不是表名和列名。

HQL可以实现对实体对象的查询、更新和删除等操作。

以下是HQL的一些常用语法:-查询所有的实体对象:FROM实体类名-条件查询:FROM实体类名WHERE条件-投影查询:SELECT属性列表FROM实体类名-排序查询:FROM实体类名ORDER BY属性ASC/DESC-分页查询:FROM实体类名LIMIT开始位置,查询数量HQL的编写与SQL类似,但是可以直接使用实体类和属性名,从而更加面向对象。

例如,以下HQL语句可以查询出所有年龄大于18岁的用户:FROM User WHERE age > 182.原生SQL查询除了HQL,Hibernate还支持原生的SQL查询。

原生SQL查询可以直接编写传统的SQL语句,但是需要使用Session对象的createNativeQuery方法来执行。

以下是原生SQL查询的一些常用语法:-执行查询:session.createNativeQuery("SELECT * FROM表名").getResultList()-执行更新或删除:session.createNativeQuery("UPDATE/DELETE FROM表名WHERE条件").executeUpdate()-参数绑定:Query.setParameter(参数名,参数值)原生SQL查询可以更灵活地操作数据库,但是需要注意SQL语句的安全性和兼容性问题。

Hibernate常见错误

Hibernate常见错误

Hibernate常见错误1.错误:object references an unsaved transient instance - save the transient instance before flushing:com.xxxx.bean.java.Sysblog; nested exception isorg.hibernate.TransientObjectException: object references an unsavedtransient instance - save the transient instance before flushing:com.xxx.bean.java.Sysblog解决方法:没有可预期的实例,当然就要实例化对象咯2.错误:Exceptionobject references an unsaved transient instance - save the transient instance before flushing:src.persistent.Product......解决方法:原因没有为某对象进行set设置,如上边的这个就是某对象没有调用setProduct 3.错误:Illegal attempt to associate a collection with two open sessions......解决方法:(hibernate的session提供了一级缓存,每个session,对同一个id进行两次load,不会发送两条sql给数据库,但是session关闭的时候,一级缓存就失效了。

sysblogarticle.setAmount(new Long(sysblogcommentService.selcom(sysblogarticle.getArticleid().toString()).size()));//通过文章id获取文章评论数sysblogarticle.setSysblogcomments(null);//关键sysblogarticleService.saveOrUpdate(sysblogarticle);//将文章中评论条数修改参考:[url=/blog/forum/17913][color=#0000ff]http://javaflas /blog/forum/17913[/color][/url]4.错误:Hbm映射文件都生成好后,改数据库增加了默认值(如:将某个字段值设为1),结果在插入的时候,数据库那边没有反应。

uncategorized sqlexception,error code 1615 -回复

uncategorized sqlexception,error code 1615 -回复

uncategorized sqlexception,error code 1615 -回复SQL异常是在数据库操作中常见的问题,其中错误代码1615是指引用了无效的列名或表名。

当出现这个错误代码时,说明在查询或更新数据库表时发生了问题。

本文将逐步解答这个错误代码,并提供解决方案。

第一步:了解SQL异常在开始解决问题之前,我们首先需要了解SQL异常及其常见原因。

SQL (Structured Query Language)是用于管理和操作关系型数据库的语言。

在数据库操作过程中,可能会遇到各种异常,包括语法错误、约束冲突、空值问题等。

这些异常会导致数据库操作无法正常执行,进而引发错误。

第二步:理解错误代码1615错误代码1615指出在数据库操作中使用了无效的列名或表名。

这意味着在查询或更新数据库表时,所提供的列名或表名无效或不存在。

这通常是由于拼写错误、大小写问题或表不存在等原因引起的。

第三步:排查错误原因当遇到错误代码1615时,我们可以通过以下步骤来排查错误原因:1.检查语法:首先,我们应该仔细检查查询或更新语句的语法是否正确。

确认所有的关键字、表名、列名和运算符的拼写与大小写是否一致。

2.验证表名和列名:确认所使用的表名和列名是否正确。

可以通过查询数据库的系统表或使用数据库管理工具来验证表名和列名是否存在。

确保表名和列名的大小写与数据库中定义的一致。

3.检查表结构:如果在查询或更新特定表时遇到错误,可以先检查该表的结构是否与操作相匹配。

确保查询语句中引用的列名在表结构中存在。

4.排除引号问题:在SQL语句中,字符串常量通常需要使用引号括起来。

如果引号使用不正确,也可能导致错误代码1615。

在检查查询语句时,确保引号的使用正确。

第四步:解决错误代码1615根据错误代码1615的原因,我们可以尝试以下解决方案:1.检查拼写和大小写:仔细检查查询语句中的表名和列名的拼写和大小写。

确保它们与数据库中的定义一致。

java hibernate复杂sql写法

java hibernate复杂sql写法

Java Hibernate是一种用于管理数据库的框架,它提供了一种对象关系映射(ORM)的方法,通过该方法可以将Java类和数据库表进行映射。

在实际应用中,我们经常会遇到复杂的SQL查询需求,如多表连接、子查询、聚合函数等。

本文将介绍在Java Hibernate中如何进行复杂SQL查询,包括以下内容:1. 多表连接查询:在实际应用中,我们经常会需要查询跨越多个表的数据,这时就需要使用多表连接查询。

在Java Hibernate中,可以使用Criteria查询或者HQL(Hibernate Query Language)进行多表连接查询。

我们有两个实体类User和Order,想要查询用户的订单信息,可以使用Criteria查询或者HQL进行多表连接查询。

2. 子查询:在一些情况下,我们需要在查询中嵌套另一个查询,这就是子查询。

在Java Hibernate中,可以使用DetachedCriteria实现子查询。

DetachedCriteria允许我们创建独立于Session的Criteria查询,可以在不同的Session中重用查询条件,从而实现子查询功能。

3. 分组与聚合函数:在SQL查询中,经常会用到分组和聚合函数,例如统计某个字段的平均值、最大值、最小值等。

在Java Hibernate中,可以使用Criteria 的Projection和Projections实现分组和聚合函数的查询。

通过Projection和Projections,我们可以实现类似于SQL中的group by 和聚合函数的功能。

4. 原生SQL查询:除了使用Criteria查询和HQL,我们还可以在Java Hibernate中执行原生SQL查询。

通过Session.createSQLQuery方法,可以执行原生SQL查询,并将结果映射到实体类中。

5. 参数绑定:在进行复杂SQL查询时,经常会涉及到参数的绑定。

在Java Hibernate中,可以使用setParameter方法进行参数绑定,从而实现动态查询的功能。

hibernate sql 规则

hibernate sql 规则

hibernate sql 规则Hibernate是一个Java对象关系映射框架,可以将Java对象与关系数据库表之间进行映射,使得开发人员可以通过面向对象的方式操作数据库,而不需要直接编写SQL语句。

在使用Hibernate进行开发时,需要遵循一些SQL规则,以便正确地进行数据库操作。

1.表名与类名映射规则:Hibernate默认使用类名作为表名,类名的首字母小写。

如果需要与已经存在的表进行映射,可以使用@Table 注解来指定表名。

2.字段名与属性名映射规则:Hibernate默认使用属性名作为字段名,属性名的首字母小写。

如果需要与已经存在的字段进行映射,可以使用@Column注解来指定字段名。

3.主键映射规则:Hibernate要求每个实体类都必须有一个主键。

可以使用@Id注解来标记主键字段,主键字段可以是任意类型(基本类型、引用类型等),但通常推荐使用Long或Integer类型。

4.数据库表设计规范:Hibernate推荐使用规范化的数据库设计,表与表之间使用外键进行关联,避免数据冗余和数据不一致的问题。

5.集合映射规则:Hibernate支持将Java中的集合类型(List、Set、Map等)与数据库表进行映射。

可以使用@ElementCollection注解来标记集合属性,并使用@CollectionTable注解来指定映射到的数据库表。

6.关联关系映射规则:Hibernate支持一对一、一对多、多对一、多对多等关联关系的映射。

可以使用@OneToOne、@OneToMany、@ManyToOne、@ManyToMany等注解来标记关联关系,并使用@JoinColumn、@JoinTable等注解指定关联关系的表和字段。

7. SQL语句的优化:在使用Hibernate进行数据库查询时,可以通过使用索引、合理设计查询语句、使用分页等方法来优化SQL语句的性能。

同时,Hibernate还提供了缓存机制,可以缓存查询结果,提高查询的速度。

Hibernate的工作原理

Hibernate的工作原理

Hibernate的工作原理Hibernate是一个开源的Java持久化框架,它能够将Java对象映射到关系型数据库中,并提供了一套简单而强大的API,使得开辟人员能够更加方便地进行数据库操作。

Hibernate的工作原理主要包括以下几个方面:1. 对象关系映射(ORM):Hibernate使用对象关系映射技术将Java对象与数据库表之间建立起映射关系。

开辟人员只需要定义好实体类和数据库表之间的映射关系,Hibernate就能够自动地将Java对象持久化到数据库中,或者将数据库中的数据映射成Java对象。

2. 配置文件:Hibernate通过一个配置文件来指定数据库连接信息、映射文件的位置以及其他一些配置信息。

配置文件通常是一个XML文件,其中包含了数据库驱动类、连接URL、用户名、密码等信息。

开辟人员需要根据自己的数据库环境进行相应的配置。

3. SessionFactory:Hibernate的核心组件是SessionFactory,它负责创建Session对象。

SessionFactory是线程安全的,通常在应用程序启动时创建一次即可。

SessionFactory是基于Hibernate配置文件和映射文件来构建的,它会根据配置文件中的信息来创建数据库连接池,并加载映射文件中的映射信息。

4. Session:Session是Hibernate的另一个核心组件,它代表了与数据库的一次会话。

每一个线程通常会有一个对应的Session对象。

Session提供了一系列的方法,用于执行数据库操作,如保存、更新、删除、查询等。

开辟人员通过Session对象来操作数据库,而不直接与JDBC打交道。

5. 事务管理:Hibernate支持事务的管理,开辟人员可以通过编程方式来控制事务的提交或者回滚。

在Hibernate中,事务是由Session来管理的。

开辟人员可以通过调用Session的beginTransation()方法来启动一个事务,然后根据需要进行提交或者回滚。

Hibernate报错大全

Hibernate报错大全

(1):ng.ClassCastException:ng.Integer cannot be cast to org.hibernate.classic.Session报错原因:已经打开的Session强转创建对象Session调.Save()方法造成的。

解决方法:直接点方法,或者赋值后再调.Save()方法。

(2)org.hibernate.hql.ast.QuerySyntaxException:AUCTIONUSER is not mapped.[FROM AUCTIONUSER WHERE USERNAME=:USERNAME AND USERPASSWORD=:USERPASSWORD]报错原因:在Hibernate中使用Query是对象不是数据库中的表名,是实体类名解决方法:修改HQL语句表名为实体类名(3)ng.NullPointerException报错原因:空指针一般是空对象未实例化造成的解决方法:找到对象高度值的状态值是否为Null(4)javax.el.ELException:Cannot convert0of type class ng.Long to class ng.Boolean报错原因:Integer和Bool类型转换失败解决方法:修改类型统一(5)org.hibernate.exception.SQLGrammarException:could not get next sequence value报错原因:Oracle数据库中创建没有序列解决方法:去数据库中创建序列(6)org.hibernate.exception.LockAcquisitionException:Cannot open connection报错原因:Oracle服务没有启动解决方法:启动Oracle服务就搞定(7)org.hibernate.exception.GenericJDBCException:Could not execute JDBC batch updateCaused by:java.sql.BatchUpdateException:ORA-12899:列"AUCTION"."AUCTIONUSER"."USERPOSTNUMBER"的值太大(实际值:16,最大值:6)报错原因:插入数据与数据库约束不符解决方法:检查插入数据与数据库约束是否一致、是否是非法数据(7)org.hibernate.hql.ast.QuerySyntaxException:unexpected token:*near line1,column8[select*from com.bdqn.entity.Auction]报错原因:HQL语句错误*解决方法:检查HQL语句(8)Exception in thread"main" org.hibernate.PropertyAccessException:exception setting property value with CGLIB(set e_reflection_optimizer=false for more info) setter of com.bdqn.entity.Emp.setComm报错原因:解决方法:把实体类中的int改成Integer double改为Double (9)Caused by:org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions(1)are: PropertyAccessException1: org.springframework.beans.MethodInvocationException: Property'driverClassName'threw exception;nested exception is ng.IllegalStateException:Could not load JDBCdriver class[oracle.jdbc.OracleDriver]报错原因:找不到oracle架包解决方法:加载oracle架包。

Hibernate常见错误

Hibernate常见错误
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 oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:213)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
... 3 more
Caused by: java.sql.BatchUpdateException: ORA-00904: "JD_NAME": 标识符无效
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10070)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)

hibernate错误:org.hibernate.HibernateException...

hibernate错误:org.hibernate.HibernateException...

hibernate错误:org.hibernate.HibernateException...hibernate 错误:org.hibernate.HibernateException: Unable to get the default Bean Validation factory分类: hibernate 2011-07-09 10:37 1492人阅读评论(1) 收藏举报前几天看了一下教程,自己试着配置了一下web下的hibernate,悲剧的时,出错了提示下面:[java] view plaincopy?1.信息: Hibernate Validator bean-validator-3.0-JBoss-4.0.2Exception in thread "main" org.hibernate.HibernateExceptio n: Unable to get the default Bean Validation factoryat org.hiber nate.cfg.beanvalidation.BeanValidationActivator.applyDDL(Bean ValidationActivator.java:127)at org.hibernate.cfg.Configuration.a pplyBeanValidationConstraintsOnDDL(Configuration.java:1704)a t org.hibernate.cfg.Configuration.applyConstraintsToDDL(Config uration.java:1654)at org.hibernate.cfg.Configuration.secondPass Compile(Configuration.java:1445)at org.hibernate.cfg.Configurat ion.buildSessionFactory(Configuration.java:1856)at hb.sh.model. mainClass.main(mainClass.java:9)Caused by: ng.reflect.Inv ocationTargetExceptionat sun.reflect.NativeMethodAccessorImp l.invoke0(Native Method)at sun.reflect.NativeMethodAccessorI mpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.Del egatingMethodAccessorImpl.invoke(DelegatingMethodAccesso rImpl.java:25)at ng.reflect.Method.invoke(Method.java:597 )at org.hibernate.cfg.beanvalidation.BeanValidationActivator.app lyDDL(BeanValidationActivator.java:118)... 5 moreCaused by: org. hibernate.HibernateException: Unable to build the default Valid atorFactoryat org.hibernate.cfg.beanvalidation.TypeSafeActivato r.getValidatorFactory(TypeSafeActivator.java:383)at org.hibernate.cfg.beanvalidation.TypeSafeActivator.applyDDL(TypeSafeActiva tor.java:109)... 10 moreCaused by: javax.validation.ValidationExce ption: Unable to instantiate Configuration.at javax.validation.Vali dation$GenericBootstrapImpl.configure(Validation.java:272)at ja vax.validation.Validation.buildDefaultValidatorFactory(Validation. java:111)at org.hibernate.cfg.beanvalidation.TypeSafeActivator.g etValidatorFactory(TypeSafeActivator.java:380)... 11 moreCaused by: ng.NullPointerExceptionat java.util.ResourceBundle.ge tBundle(ResourceBundle.java:960)at org.hibernate.validator.engi ne.ResourceBundleMessageInterpolator.loadBundle(ResourceBu ndleMessageInterpolator.java:202)at org.hibernate.validator.engi ne.ResourceBundleMessageInterpolator.getFileBasedResourceB undle(ResourceBundleMessageInterpolator.java:182)at org.hiber nate.validator.engine.ResourceBundleMessageInterpolator.<init >(ResourceBundleMessageInterpolator.java:81)at org.hibernate. validator.engine.ResourceBundleMessageInterpolator.<init>(Res ourceBundleMessageInterpolator.java:73)at org.hibernate.valida tor.engine.ConfigurationImpl.<init>(ConfigurationImpl.java:57)a t org.hibernate.validator.HibernateValidator.createGenericConfig uration(HibernateValidator.java:43)at javax.validation.Validation$ GenericBootstrapImpl.configure(Validation.java:269)... 13 more 在网上奔波了几天,都没打找到解决的办法,无奈啊,自己硬着头皮,看hibernate的帮助文档,搜索validation,打开有道词典边翻译边看帮助文档,希望它能帮我,功夫不负有心人,终于让我找到了一段:[html] view plaincopy?1.23.1.1. Adding Bean Validation2.3.To enable Hibernate's Bean Validation integration, simply add a Bean Validation provider (preferably Hibernate Validation4) on your classpath.4.5.23.1.2. Configuration6.7.By default, no configuration is necessary.8.9.The Default group is validated on entity insert and update and the database model is updated accordingly based on the Default group as well.10.11.You can customize the Bean Validation integration by setting the validation mode. Use the javax.persistence.validation .mode property and set it up for example in your persistence.x ml file or your hibernate.cfg.xml file. Several options are possibl e:12.13.auto (default): enable integration between Bean Valida tion and Hibernate (callback and ddl generation) only if Bean Va lidation is present in the classpath.14.none: disable all integration between Bean Validation and Hibernate15.callback: only validate entities when they are either ins erted, updated or deleted. An exception is raised if no Bean Vali dation provider is present in the classpath.16.ddl: only apply constraints to the database schema wh en generated by Hibernate. An exception is raised if no Bean Val idation provider is present in the classpath. This value is not defi ned by the Java Persistence spec and is specific to Hibernate.17.注意18.You can use both callback and ddl together by settingthe property to callback, dll19.20.<persistence ...>21.<persistence-unit ...>22....23.<properties>24.<property name="javax.persistence.validation.mode"25.value="callback, ddl"/>26.</properties>27.</persistence-unit>28.</persistence>29.This is equivalent to auto except that if no Bean Valida tion provider is present, an exception is raised.30.If you want to validate different groups during insertio n, update and deletion, use:31.32.javax.persistence.validation.group.pre-persist: groups validated when an entity is about to be persisted (default to Default)33.javax.persistence.validation.group.pre-update: groups validated when an entity is about to be updated (default to Default)34.javax.persistence.validation.group.pre-remove: groups validated when an entity is about to be deleted (default to no group).hibernate.validator.group.ddl: groups considered when applying constraints on the database schema (default to Default)36.Each property accepts the fully qualified class names of the groups validated separated by a comma (,)这里大意就是在hibernate.cfg.xml或者是persistence.xml文件下面需要配置javax.persistence.validation.mode属性我不知道是什么意思,我于是直接改我的hibernate.cfg.xml文件里添加属性:[html] view plaincopy?1.<property name="javax.persistence.validation.mode">no ne</property>可怜的我居然hibernate居然不报错了。

org.hibernate.exception.GenericJDBCException:。。。

org.hibernate.exception.GenericJDBCException:。。。

org.hibernate.exception.GenericJDBCException:。

异常信息:Exception:org.hibernate.exception.GenericJDBCException: could not execute statementStack trace:org.hibernate.exception.GenericJDBCException: could not execute statementat org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:136)at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:96)at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:58)at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2975)at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3487)at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81)at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:377)at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:214)at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:194)at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:178)at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:321)at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:286)at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:192)at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125)at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:206)at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:191)at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:764)at org.hibernate.internal.SessionImpl.save(SessionImpl.java:756)at org.hibernate.internal.SessionImpl.save(SessionImpl.java:752)at erDaoImpl.save(UserDaoImpl.java:19)at erServiceImpl.save(UserServiceImpl.java:16)at erServiceImpl$$FastClassByCGLIB$$7d9d4604.invoke(<generated>)at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:710)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:643)at erServiceImpl$$EnhancerByCGLIB$$f1d51c6f.save(<generated>)at erAction.save(UserAction.java:26)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at ng.reflect.Method.invoke(Method.java:606)at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450)at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252)at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:161)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:563)at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)at .JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)at ng.Thread.run(Thread.java:745)Caused by: java.sql.SQLException: Field 'id' doesn't have a default valueat com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498)at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568)at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113)at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2409)at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2327)at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2312)at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:133)... 105 more错误原因:没有设置数据库表主键⾃增长。

hibernate使用sql进行查询

hibernate使用sql进行查询

hibernate使⽤sql进⾏查询在我们的hibernate中,除了我们常⽤的HQL查询以外,还⾮常好的⽀持了原⽣的SQL查询,那么我们既然使⽤了hibernate,为什么不都采⽤hibernate推荐的HQL查询语句呢?这是因为HQL查询语句虽然⽅便我们查询,但是基于HQL的查询会将查询出来的对象保存到hibernate 的缓存当中,如果在我们的⼀个⼤型项⽬中(数据量超过了百万级),这个时候如果使⽤hibernate的HQL查询的话,会⼀次将我们查询的对象查询出来后放到缓存中,这个时候会影响我们的效率,所以当在⼤型项⽬中使⽤hibernate时我们的最佳实践就是--使⽤原⽣的SQL查询语句,⽽不使⽤HQL语句,因为通过SQL查询的话,是不会经过hibernate的缓存的。

接下来我们就来看看hibernate的原⽣SQL查询1.标量查询在hibernate中,我们如果使⽤原⽣SQL查询的话,是通过SQLQuery接⼝进⾏的,我们⾸先来看看我们最基本的查询:session.createSQLQuery("select * from t_student s").list()session.createSQLQuery("select ID,NAME,SEX from t_student s").list()这就创建了最简单的两条SQL查询语句,此时返回的数据库表的字段值是保存在⼀个Object[]数组中的,数组中的每个元素就是查询出来的t_student表中的每个字段值,Hibernate会通过ResultSetMetadata来判断每个字段值的存放位置以及类型,接下来我们看下标量查询:List<Object[]> stus = (List<Object[]>)session.createSQLQuery("select * from t_student s").addScalar("ID").addScalar("NAME").setFirstResult(0).setMaxResults(20).list();这个查询语句指定了查询的字符串以及返回的字段和类型这条查询语句仍然会返回⼀个Object[]类型的数组,但是此时就不会通过ResultSetMetadata,⽽是我们明确指定的ID,NAME,SEX,此时虽然查询语句中有 * 将所有的字段查询出来,但是这个时候仅仅只会返回我们指定的三个字段值,其类型还是由ResultSetMetada来指定的。

Hibernate出错总结

Hibernate出错总结

错误1:-----------------------------------------------------------------------------------------------------------------No getter method for property XXXX of bean异常如下:No getter method for property XXXX of beanorg.apache.struts.taglib.html.BEAN在网上找了不少资料.中文的英文的.出现这个异常的还真不少.大部分都是在用select标签的时候...提示都是找不到属性的getter方法,可是我发现.出现这个问题的属性全都有getter方法!!不排除有一部分大小写字母写错的原因.可是这个问题不是那么简单.因为我敢保证我的拼写没有错误.最后恢复正常的时候我都不知道为什么.只不过我一气之下全改小写了!竟然好用了.经验之谈:1.写代码的时候一定要小心.一般小心都不行.2.不要过分相信系统.也不要过分的不相信自己.系统出错的几率也是很大的.3.英文一定要学好.4.google比baidu 好用.看来真的是java命名规范问题,我改了好多处命名,这回到底是出来了-------------------------------------------------------------------------------------------------------------------错误2:当struts中转向另外一个页面时,css会引入错误怎么办呢?在head中加入这个就可以了:<html:base />在开始还要加入<%@ taglib uri="/tags-html" prefix="html"%>这样就ok-----------------------------------------------------------------------------------------------------------------错误3<bean:write>不能显示Integer,BigDecimal等类型的属性问题的解决在用struts标签bean:write name=".." property=".."/ 显示Integer ,BigDecimal类型的属性时,会报javax.servlet.jsp.JspException: Cannot find message resources under key org.apache.struts.action.MESSAGEatorg.apache.struts.taglib.TagUtils.retrieveMessageResources(TagUtils.ja va:1252)at org.apache.struts.taglib.TagUtils.message(TagUtils.java:1101) at org.apache.struts.taglib.TagUtils.message(TagUtils.java:1076) atorg.apache.struts.taglib.bean.WriteTag.retrieveFormatString(WriteTag. java:254)atorg.apache.struts.taglib.bean.WriteTag.formatValue(WriteTag.java:317) atorg.apache.struts.taglib.bean.WriteTag.doStartTag(WriteTag.java:232) at org.apache.jsp.client$jsp._jspService(client$jsp.java:379)atorg.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)atorg.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspSer vlet.java:201)atorg.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:381) atorg.apache.jasper.servlet.JspServlet.service(JspServlet.java:473)这样的错误解决的办法就是利用 bean:write 的format属性,加上一个format="#" 属性bean:write name="testForm" property="testBig" format="#"/BigDecimal型数据处理bean:write name="testForm" property="testInt" format="#" /Intger型数据处理关于format还有不少很好的妙用比如你要显示的日期格式为年-月-日时:分:秒,则可以定义为format="yyyy-MM-dd HH:mm:ss"比如你要定义显示到小数点后几位,则可以定义为format="000.00"错误4.Exception thrown by getter for property pages of beanorg.apache.struts.taglib.html.BEAN解答:public String getPages(){return this.getPages();}这里不对吧,变成递归了,呵呵return this.pages;常用错误总结:7.int 类型字符过长com.mysql.jdbc.exceptions.MySQLDataException: '2.5026744582E10' in co lumn '1' is outside valid range for the datatype INTEGER.8.没找到错误没影响数据读取java.sql.SQLExceptio n: Operatio n not allowed after ResultSet closed9.类型错误最常见的是数字类型错误Data truncated for column 'gatheringMoney' at row 1struts错误Failed to obtain specified co llection 下拉框没值警告: No FormBeanConfig found under 'yuanLiaoRuKuForm' 配置文件Form出错Cannot find bean: "org.apache.struts.taglib.html.BEAN" in any scope <html:text >标签外面没有嵌套<html:form >标签9. 若在数据库中创建了两个sequence ,运行时出现异常可能是先后执行了多次select语句,导致与原有的序列号产生冲突12. MappingNotFoundExceptiona) Maybe: In the Eclipse Not refersh , or not exist in the dirctory13. HibernateException: /hibernate.cfg.xml not founda) Maybe1: hibernate.cfg.xml not in the root directoryb) Maybe2: Could not parse configuration .c) reso lve: database not connect or use another database14. ConstraintVio latio nExceptiona) Maybe: used a not true database15. 驱动没有找到或者 JDBC Driver not found可能:连接数据库的驱动jar包不存在或者版本不一致,比如将旧的版本换成新的会造成该类错误16. 空指针异常, ng.NullPointerExceptiona) 可能1:数据库连接出错,比如在hibernate.cfg.xml中的数据错误会导致异常。

hibernate常见问题及处理

hibernate常见问题及处理

Hibernate 常见异常net.sf.hibernate.MappingException当出现net.sf.hibernate.MappingException: Error reading resource:…异常时一般是因为映射文件出现错误。

当出现net.sf.hibernate.MappingException: Resource: … not found是因为XML配置文件没找到所致,有可能是放置目录不正确,或者没将其加入hibernate.cfg.x ml中。

2. net.sf.hibernate.PropertyNotFoundException当出现net.sf.hibernate.PropertyNotFoundException: Could not find a set ter for propertyname in class …时,原因一般是因为XML映射文件中的属性与对应的Java类中的属性的getter或setter方法不一致。

3. org.hibernate.id.IdentifierGenerationException当出现org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save():异常时,一般是因为<id>元素配置不正确,<id>元素缺少其子元素<generator></generator>的配置引起。

解决方案:<id>元素映射了相应数据库表的主键字段,对其子元素<generator cl ass="">,其中class的取值可以为increment、identity、sequence、hilo、native……等,更多的可参考hi bernate参考文档,一般取其值为native 。

Hibernate模糊查询%?%SQL执行异常

Hibernate模糊查询%?%SQL执行异常

Hibernate模糊查询%?%SQL执⾏异常
今天我在使⽤Hibernate 的SQL预编译之后注⼊参数的形式写了⼀条模糊查询语句。

刚开始我是这么写的
然后当我执⾏这条SQL语句后
可以看到结果是⽆效字符SQL异常。

然后我查了下原因,发现以上SQL在预编译时缺少 ' ' 才导致SQL异常
下⾯我改成这种⽅式
结果输出如下
这问题原因是什么呢?
原因:HQL语句中''中的?没有解析成占位符,确解析成字符串了。

所以按照要求要去掉' ',但去掉' '就会报上⾯⼀项错误。

在我咨询了同事⾃后,我的问题得到了解决。

解决的⽅法就是使⽤SQL 中的 || 字符串连接符。

这种⽅式就避免了上⾯两种⽅式带来的异常问题,⽽且还是⽤了SQL预编译,防范了SQL注⼊攻击。

以上是我⼯作中⼀个⼩问题,特此记录,以备以后⾃⼰查阅。

Hibernate自动创建表bug问题解决

Hibernate自动创建表bug问题解决

Hibernate⾃动创建表bug问题解决我在hibernate.cfg.xml配置⽂件中添加了⾃动创建表的的属性:(这样当数据库中没有此表是,hibernate就会⾃动帮我们创建⼀张表)<property name="hbm2ddl.auto">create</property>但是当执⾏的时候出现报错:INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialectHibernate: drop table if exists student⼗⽉ 08, 2018 3:42:47 下午 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnectionINFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@7882c44a] for (non-JTA) DDL execution was not in auto-comm Hibernate: create table student (id integer not null, name varchar(255), age integer, primary key (id)) type=MyISAM⼗⽉ 08, 2018 3:42:47 下午 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnectionINFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@4bf324f9] for (non-JTA) DDL execution was not in auto-comm ⼗⽉ 08, 2018 3:42:47 下午 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleExceptionWARN: GenerationTarget encountered exception accepting command : Error executing DDL "create table student (id integer not null, name varchar(255), age integer, primary key (id)) type=MyISAM" via JDBC StatementmandAcceptanceException: Error executing DDL "create table student (id integer not null, name varchar(255), age integer, primary key (id)) type=MyISAM" via JDBC Statementat org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67)at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlString(SchemaCreatorImpl.java:440)at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlStrings(SchemaCreatorImpl.java:424)at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:315)at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:166)at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:135)at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:121)at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:155)at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72)at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:310)at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:467)at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708)at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)at hibernateTest.Test1.main(Test1.java:18)Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=MyISAM' at line 1at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)at ng.reflect.Constructor.newInstance(Unknown Source)at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)at com.mysql.jdbc.Util.getInstance(Util.java:408)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2483)at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2441)at com.mysql.jdbc.StatementImpl.executeInternal(StatementImpl.java:845)at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:745)at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54)... 13 more⼗⽉ 08, 2018 3:42:47 下午 org.hibernate.tool.schema.internal.SchemaCreatorImpl applyImportSourcesINFO: HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@3c443976'Hibernate: insert into student (name, age, id) values (?, ?, ?)⼗⽉ 08, 2018 3:42:47 下午 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptionsWARN: SQL Error: 1146, SQLState: 42S02⼗⽉ 08, 2018 3:42:47 下午 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptionsERROR: Table 'student.student' doesn't exist⼗⽉ 08, 2018 3:42:47 下午 org.hibernate.internal.ExceptionMapperStandardImpl mapManagedFlushFailureERROR: HHH000346: Error during managed flush [org.hibernate.exception.SQLGrammarException: could not execute statement]Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute statementat org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1460)at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:511)at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:3283)at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2479)at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:473)at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:178)at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$300(JdbcResourceLocalTransactionCoordinatorImpl.java:39)at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$mit(JdbcResourceLocalTransactionCoordinatorImpl.java:271)at mit(TransactionImpl.java:98)at hibernateTest.Test1.main(Test1.java:24)Caused by: org.hibernate.exception.SQLGrammarException: could not execute statementat org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63)at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:178)at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3171)at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3686)at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:90)at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:604)at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:478)at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:356)at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39)at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1454)... 9 moreCaused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'student.student' doesn't existat sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)at ng.reflect.Constructor.newInstance(Unknown Source)at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)at com.mysql.jdbc.Util.getInstance(Util.java:408)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2487)at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079)at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2013)at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5104)at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1998)at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:175)... 17 more通过查找问题发现,其实是⽀持mysql的版本问题:把:<property name="dialect">org.hibernate.dialect.MySQLDialect</property>改为:就可以了<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>。

sqlgrammarexception could not extract resultset

sqlgrammarexception could not extract resultset

sqlgrammarexception could not extract resultset SQLGrammarException是hibernate框架中的一个异常类,通常出现在使用Hibernate进行数据库操作时,由于SQL语句不正确或者数据库表结构不匹配等原因导致无法获取结果集造成的异常。

本文将介绍SQLGrammarException异常、产生原因以及解决方法。

一、SQLGrammarException异常SQLGrammarException是hibernate框架中的一个异常类,属于运行时异常,它继承自HibernateException,表示在执行SQL语句时出现了语法错误。

二、产生原因SQLGrammarException异常通常是由于SQL语句不正确或者数据库表结构不匹配等原因导致无法获取结果集造成的。

其中常见的情况包括:1. SQL语句错误:SQL语句中使用了错误的关键字、语法错误等情况。

2. 数据库表结构不匹配:SQL语句中使用了不存在的表、字段不存在、数据类型不匹配等情况。

3. 数据库连接问题:数据库连接超时、数据库地址不正确、数据库用户名密码不正确等情况。

三、解决方法1. 检查SQL语句是否正确:检查SQL语句中是否有语法错误、关键字错误等问题。

2. 检查数据库表结构是否匹配:检查SQL语句中使用的表是否存在、字段是否存在、数据类型是否匹配等问题。

3. 检查数据库连接是否正常:检查数据库连接是否超时、数据库地址、用户名密码是否正确等问题。

4. 使用日志记录SQL语句的执行过程:使用日志记录SQL语句的执行过程,可以更清晰地了解SQL语句的执行过程以及出现问题的原因。

总之,SQLGrammarException异常通常是由于SQL语句不正确或者数据库表结构不匹配等原因导致无法获取结果集造成的异常。

在使用Hibernate进行数据库操作时,需要注意SQL语句的正确性以及数据库表结构的匹配性,并及时排查数据库连接问题,以避免出现SQLGrammarException异常。

statementcallback; uncategorized sqlexception

statementcallback; uncategorized sqlexception

statementcallback; uncategorized sqlexception 摘要:1.SQLException 的概述2.SQLException 的分类3.SQLException 的常见处理方法4.使用StatementCallback 处理SQLException5.示例代码正文:1.SQLException 的概述SQLException 是Java 中处理SQL 语句异常的一个类,当执行SQL 语句时,可能会遇到各种异常情况,例如表名或列名错误、数据库连接失败等。

这些异常情况都可以通过SQLException 类来处理。

2.SQLException 的分类SQLException 类主要包括以下子类:- SQLIllegalArgumentException:非法参数异常- SQLNullPointerException:空指针异常- SQLFeatureNotSupportedException:不支持的特性异常- SQLException:通用异常- SQLTransientException:临时异常- SQLError:数据库错误3.SQLException 的常见处理方法在处理SQLException 时,通常有以下几种方法:- 捕获异常:使用try-catch 语句捕获SQLException,可以在catch 块中进行异常处理。

- 抛出异常:在某些情况下,需要将异常抛出,通知调用者处理异常。

- 忽略异常:使用setIgnoreExceptions 方法忽略某些特定的异常。

4.使用StatementCallback 处理SQLExceptionStatementCallback 是一个接口,它允许我们在执行SQL 语句之前或之后执行代码。

通过实现StatementCallback 接口,我们可以在执行SQL 语句时捕获或处理SQLException。

下面是一个使用StatementCallback 处理SQLException 的示例:```javaimport java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException;import java.sql.Statement;public class StatementCallbackExample {public static void main(String[] args) {Connection conn = null;PreparedStatement pstmt = null;try {conn =DriverManager.getConnection("jdbc:mysql://localhost:3306/test","username", "password");pstmt = conn.prepareStatement("SELECT * FROM user WHERE id =?");pstmt.setInt(1, 1);pstmt.executeUpdate();} catch (SQLException e) {if (e.getErrorCode() == 1062) { // 表名或列名错误System.out.println("Error: 表名或列名错误");} else if (e.getErrorCode() == 1005) { // 数据库连接失败System.out.println("Error: 数据库连接失败");} else {throw e; // 将异常抛出}}finally {try {if (pstmt!= null) {pstmt.close();}if (conn!= null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}}}```在这个示例中,我们使用try-catch 语句捕获SQLException,并根据错误代码进行处理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文由我司收集整编,推荐下载,如有疑问,请与我司联系
关于 org.hibernate.exception.SQLGrammarException: could not
insert:
2012/04/27 12317 在部署 hibernate 项目时,出现如下错误:
Exception in thread “main” org.hibernate.exception.SQLGrammarException: could
中 user 是关键字。这里是不能使用关键字的。
Over!!!
tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!
not
insert:
[er]
at
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)
at
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCБайду номын сангаасxceptionHelper.java:66) at
EventListener.java:320)
at
org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListen
er.java:203)
at
org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEv
27)
at
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:28
34)
at
org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
entListener.java:129)
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequest
edId(DefaultSaveOrUpdateEventListener.java:210)
org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelega
te.java:64)
at
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:23
OrUpdateEventListener.java:195)
at
org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEve
ntListener.java:50)
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSave
OrUpdateEventListener.java:93)
at
org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:713)
at
org.hibernate.impl.SessionImpl.save(SessionImpl.java:701)
at
org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
at
org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSave
at
org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(Defa
ultSaveEventListener.java:56)
at
本文由我司收集整编,推荐下载,如有疑问,请与我司联系
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSave
at
org.hibernate.impl.SessionImpl.save(SessionImpl.java:697)
at
com.hibernate.test.BaseTest.main(BaseTest.java:23) 分析了下原来是在 User.hbm.xml
文件中我建表的时候
class name=“er” table=“user” 在这里 table=“user”,
相关文档
最新文档