相同的代码,但是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();
}  
}}错误代码在下面

解决方案 »

  1.   

    但是就是报错如下:
     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
    接下面:
      

  2.   

    INFO [main] (SessionFactoryImpl.java:379) -Checking 0 named queries
    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