相同的代码,但是hibernate在不同的数据库就是执行报错,在SYBASE下同样的可以正常执行,但是informix下执行就报错,在tx.commit()的时候就报错,而去掉事物就不报错,但是也不影响数据库。
但是在sybase的环境中可以正常执行,所以怀疑是不是hibernate对informix支持不够好,还是什么地方配置不对,忘高手指教。informix的hibernate.cfg.xml如下::
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration><session-factory>
<property name="connection.username">informix</property>
<property name="connection.url">jdbc:informix-sqli://168.3.1.168:3333/beps:INFORMIXSERVER=cibcs;NEWCODESET=gbk,8859-1,819</property>
<property name="dialect">org.hibernate.dialect.InformixDialect</property>
<property name="myeclipse.connection.profile">Informix</property>
<property name="connection.password">informix</property>
<property name="connection.driver_class">com.informix.jdbc.IfxDriver</property>
<property name="show_sql">true</property>
<mapping resource="com/Bepspmdt2106.hbm.xml"></mapping>
<mapping resource="com/Bepspmdt2101.hbm.xml"></mapping></session-factory>
</hibernate-configuration>Bepspmdt2101.hbm.xml如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="com.Bepspmdt2101" table="bepspmdt2101" schema="informix" catalog="beps">
<id name="parcode" type="string">
<column name="parcode" length="2" />
<generator class="assigned" />
</id>
<property name="parname" type="string">
<column name="parname" length="30" not-null="true" />
</property>
<property name="parvalue" type="string">
<column name="parvalue" length="40" not-null="true" />
</property>
<property name="pardesc" type="string">
<column name="pardesc" length="60" />
</property>
<property name="paruptfg" type="string">
<column name="paruptfg" length="1" />
</property>
</class>
</hibernate-mapping>
测试代码:
package test;import java.sql.Connection;
import java.sql.SQLException;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;import com.Bepspmdt2101;public class Insert2101 { /**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
//SessionFactory sf = new Configuration().addClass(Bepspmdt2101.class).buildSessionFactory();
SessionFactory sf = new Configuration().configure().buildSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
Bepspmdt2101 p = new Bepspmdt2101();
//p.setRowId(Integer.valueOf(99999999));
p.setParcode("77");
p.setParname("309391000011");
p.setParvalue("0");
p.setPardesc("222");
p.setParuptfg("1");
System.out.println(p + "_______________1");
try {
session.save(p);
//session.flush();
tx.commit();
session.close();
System.out.println(p + "_______________2");
} catch (Exception ex) {
ex.printStackTrace();
}
}}错误代码在下面
但是在sybase的环境中可以正常执行,所以怀疑是不是hibernate对informix支持不够好,还是什么地方配置不对,忘高手指教。informix的hibernate.cfg.xml如下::
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration><session-factory>
<property name="connection.username">informix</property>
<property name="connection.url">jdbc:informix-sqli://168.3.1.168:3333/beps:INFORMIXSERVER=cibcs;NEWCODESET=gbk,8859-1,819</property>
<property name="dialect">org.hibernate.dialect.InformixDialect</property>
<property name="myeclipse.connection.profile">Informix</property>
<property name="connection.password">informix</property>
<property name="connection.driver_class">com.informix.jdbc.IfxDriver</property>
<property name="show_sql">true</property>
<mapping resource="com/Bepspmdt2106.hbm.xml"></mapping>
<mapping resource="com/Bepspmdt2101.hbm.xml"></mapping></session-factory>
</hibernate-configuration>Bepspmdt2101.hbm.xml如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="com.Bepspmdt2101" table="bepspmdt2101" schema="informix" catalog="beps">
<id name="parcode" type="string">
<column name="parcode" length="2" />
<generator class="assigned" />
</id>
<property name="parname" type="string">
<column name="parname" length="30" not-null="true" />
</property>
<property name="parvalue" type="string">
<column name="parvalue" length="40" not-null="true" />
</property>
<property name="pardesc" type="string">
<column name="pardesc" length="60" />
</property>
<property name="paruptfg" type="string">
<column name="paruptfg" length="1" />
</property>
</class>
</hibernate-mapping>
测试代码:
package test;import java.sql.Connection;
import java.sql.SQLException;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;import com.Bepspmdt2101;public class Insert2101 { /**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
//SessionFactory sf = new Configuration().addClass(Bepspmdt2101.class).buildSessionFactory();
SessionFactory sf = new Configuration().configure().buildSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
Bepspmdt2101 p = new Bepspmdt2101();
//p.setRowId(Integer.valueOf(99999999));
p.setParcode("77");
p.setParname("309391000011");
p.setParvalue("0");
p.setPardesc("222");
p.setParuptfg("1");
System.out.println(p + "_______________1");
try {
session.save(p);
//session.flush();
tx.commit();
session.close();
System.out.println(p + "_______________2");
} catch (Exception ex) {
ex.printStackTrace();
}
}}错误代码在下面
解决方案 »
- Extjs 手动填充ComboBox !!!!
- 请教,线上服务器频繁session丢失
- Hibernate Criterria查询
- jsp 删除图片 fl.exists() 总是 false 求 谢谢 ,在线,测试好了马上结贴
- java中把list中的值给 map
- 如果将jsp程序打包成安装程序
- jsp当前页面如何取到列表option的value!急呀~~~!!
- 求救啊,各位大哥,请问如何用java正则表达式从<IMG src="/images/1.gif"/>取得src的值
- 下拉列表框的值如何设定?急!!!
- 让两个日期相减,获得其值!
- 3年来第一帖,求html:link方法一
- ===高手进来=======关于JS中URLCODE解码问题======================
INFO [main] (Environment.java:464) -Hibernate 3.0.5
INFO [main] (Environment.java:477) -hibernate.properties not found
INFO [main] (Environment.java:510) -using CGLIB reflection optimizer
INFO [main] (Environment.java:540) -using JDK 1.4 java.sql.Timestamp handling
INFO [main] (Configuration.java:1110) -configuring from resource: /hibernate.cfg.xml
INFO [main] (Configuration.java:1081) -Configuration resource: /hibernate.cfg.xml
INFO [main] (Configuration.java:444) -Mapping resource: com/Bepspmdt2106.hbm.xml
INFO [main] (HbmBinder.java:260) -Mapping class: com.Bepspmdt2106 -> bepspmdt2106
INFO [main] (Configuration.java:444) -Mapping resource: com/Bepspmdt2101.hbm.xml
INFO [main] (HbmBinder.java:260) -Mapping class: com.Bepspmdt2101 -> bepspmdt2101
INFO [main] (Configuration.java:1222) -Configured SessionFactory: null
INFO [main] (Configuration.java:875) -processing extends queue
INFO [main] (Configuration.java:879) -processing collection mappings
INFO [main] (Configuration.java:888) -processing association property references
INFO [main] (Configuration.java:917) -processing foreign key constraints
INFO [main] (DriverManagerConnectionProvider.java:41) -Using Hibernate built-in connection pool (not for production use!)
INFO [main] (DriverManagerConnectionProvider.java:42) -Hibernate connection pool size: 20
INFO [main] (DriverManagerConnectionProvider.java:45) -autocommit mode: false
INFO [main] (DriverManagerConnectionProvider.java:80) -using driver: com.p6spy.engine.spy.P6SpyDriver at URL: jdbc:informix-sqli://168.3.1.168:3333/beps:INFORMIXSERVER=cibcs;NEWCODESET=gbk,8859-1,819
INFO [main] (DriverManagerConnectionProvider.java:86) -connection properties: {user=informix, password=****, autocommit=false}
INFO [main] (SettingsFactory.java:77) -RDBMS: Informix Dynamic Server, version: 9.30.FC3
INFO [main] (SettingsFactory.java:78) -JDBC driver: IBM Informix JDBC Driver for IBM Informix Dynamic Server, version: 3.00.JC3
INFO [main] (Dialect.java:92) -Using dialect: org.hibernate.dialect.InformixDialect
INFO [main] (TransactionFactoryFactory.java:31) -Using default transaction strategy (direct JDBC transactions)
INFO [main] (TransactionManagerLookupFactory.java:33) -No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
INFO [main] (SettingsFactory.java:125) -Automatic flush during beforeCompletion(): disabled
INFO [main] (SettingsFactory.java:129) -Automatic session close at end of transaction: disabled
INFO [main] (SettingsFactory.java:144) -Scrollable result sets: enabled
INFO [main] (SettingsFactory.java:152) -JDBC3 getGeneratedKeys(): disabled
INFO [main] (SettingsFactory.java:160) -Connection release mode: null
INFO [main] (SettingsFactory.java:187) -Default batch fetch size: 1
INFO [main] (SettingsFactory.java:191) -Generate SQL with comments: disabled
INFO [main] (SettingsFactory.java:195) -Order SQL updates by primary key: disabled
INFO [main] (SettingsFactory.java:334) -Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
INFO [main] (ASTQueryTranslatorFactory.java:21) -Using ASTQueryTranslatorFactory
INFO [main] (SettingsFactory.java:203) -Query language substitutions: {}
INFO [main] (SettingsFactory.java:209) -Second-level cache: enabled
INFO [main] (SettingsFactory.java:213) -Query cache: disabled
INFO [main] (SettingsFactory.java:321) -Cache provider: org.hibernate.cache.EhCacheProvider
INFO [main] (SettingsFactory.java:228) -Optimize cache for minimal puts: disabled
INFO [main] (SettingsFactory.java:237) -Structured second-level cache entries: disabled
INFO [main] (SettingsFactory.java:257) -Echoing all SQL to stdout
INFO [main] (SettingsFactory.java:261) -Statistics: disabled
INFO [main] (SettingsFactory.java:265) -Deleted entity synthetic identifier rollback: disabled
INFO [main] (SettingsFactory.java:279) -Default entity-mode: pojo
INFO [main] (SessionFactoryImpl.java:152) -building session factory
WARN [main] (Configurator.java:126) -No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath: jar:file:/D:/MyEclipse/eclipse/plugins/com.genuitec.org.hibernate.eclipse_4.1.1/myeclipse-data/3.0/lib/ehcache-1.1.jar!/ehcache-failsafe.xml
INFO [main] (SessionFactoryObjectFactory.java:82) -Not binding factory to JNDI, no JNDI name configured
接下面:
com.Bepspmdt2101@1ec8909_______________1
Hibernate: insert into beps.informix.bepspmdt2101 (parname, parvalue, pardesc, paruptfg, parcode) values (?, ?, ?, ?, ?)
WARN [main] (JDBCExceptionReporter.java:71) -SQL Error: -201, SQLState: 42000
ERROR [main] (JDBCExceptionReporter.java:72) -A syntax error has occurred.
org.hibernate.exception.SQLGrammarException: could not insert: [com.Bepspmdt2101]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:59)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1869)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:2200)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:46)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:239)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:223)
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.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:324)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:86)
at test.Insert2101.main(Insert2101.java:37)
Caused by: java.sql.SQLException: A syntax error has occurred.
at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:373)
at com.informix.jdbc.IfxSqli.a(IfxSqli.java:3208)
at com.informix.jdbc.IfxSqli.E(IfxSqli.java:3518)
at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2353)
at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2269)
at com.informix.jdbc.IfxSqli.executePrepare(IfxSqli.java:1153)
at com.informix.jdbc.IfxPreparedStatement.e(IfxPreparedStatement.java:318)
at com.informix.jdbc.IfxPreparedStatement.a(IfxPreparedStatement.java:298)
at com.informix.jdbc.IfxPreparedStatement.<init>(IfxPreparedStatement.java:168)
at com.informix.jdbc.IfxSqliConnect.h(IfxSqliConnect.java:5918)
at com.informix.jdbc.IfxSqliConnect.prepareStatement(IfxSqliConnect.java:1999)
at com.p6spy.engine.spy.P6Connection.prepareStatement(P6Connection.java:169)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:396)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:76)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:69)
at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:150)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1839)
... 11 more
Caused by: java.sql.SQLException
at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:373)
at com.informix.jdbc.IfxSqli.E(IfxSqli.java:3523)
... 25 more
WARN [main] (JDBCExceptionReporter.java:71) -SQL Error: -201, SQLState: 42000
ERROR [main] (JDBCExceptionReporter.java:72) -A syntax error has occurred.
ERROR [main] (AbstractFlushingEventListener.java:277) -Could not synchronize database state with session
org.hibernate.exception.SQLGrammarException: could not insert: [com.Bepspmdt2101]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:59)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1869)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:2200)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:46)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:239)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:223)
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.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:324)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:86)
at test.Insert2101.main(Insert2101.java:37)
Caused by: java.sql.SQLException: A syntax error has occurred.
at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:373)
at com.informix.jdbc.IfxSqli.a(IfxSqli.java:3208)
at com.informix.jdbc.IfxSqli.E(IfxSqli.java:3518)
at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2353)
at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2269)
at com.informix.jdbc.IfxSqli.executePrepare(IfxSqli.java:1153)
at com.informix.jdbc.IfxPreparedStatement.e(IfxPreparedStatement.java:318)
at com.informix.jdbc.IfxPreparedStatement.a(IfxPreparedStatement.java:298)
at com.informix.jdbc.IfxPreparedStatement.<init>(IfxPreparedStatement.java:168)
at com.informix.jdbc.IfxSqliConnect.h(IfxSqliConnect.java:5918)
at com.informix.jdbc.IfxSqliConnect.prepareStatement(IfxSqliConnect.java:1999)
at com.p6spy.engine.spy.P6Connection.prepareStatement(P6Connection.java:169)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:396)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:76)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:69)
at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:150)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1839)
... 11 more
Caused by: java.sql.SQLException
at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:373)
at com.informix.jdbc.IfxSqli.E(IfxSqli.java:3523)
... 25 more