user.java//定义属性
private String id;

private String username;

private String password;========================================
User.hbm.xml<class name="com.zs.bean.Users" table="user">
<id name="id" column="id"  type="java.lang.String"><generator class="uuid.hex"/></id>
        <property name="username" column="username" type="java.lang.String"></property>
        <property name="password" column="password" type="java.lang.String"></property>
    </class>=========================================create table user(
id varchar(255) not null primary key,
username varchar(255),
password varchar(255)
)数据库是POSTGRESQL 我是用pgAdmin工具创建的
============================================
applicationContext.xml<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://localhost:5432/zs" />
<property name="username" value="postgres" />
<property name="password" value="admin" />
    </bean>==============================================异常:后台没有异常:只是打印如下:
Hibernate: insert into user (username, password, id) values (?, ?, ?)
页面500错误:org.springframework.dao.InvalidDataAccessResourceUsageException: Could not execute JDBC batch update; nested exception is org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:615)
org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)

root cause org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:237)
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)

root cause java.sql.BatchUpdateException: 批次处理 0 insert into user (username, password, id) values (44, 44, 2c9c04ed364cedad01364ceddf240001) 被中止,呼叫 getNextException 以取得原因。
org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2531)

---------------我就寻思自己连接下Postgresql,本人也知道可能是方言问题。但是用了好多确实没有解决掉。求助。

解决方案 »

  1.   

    补充:需要的可以发工程,我是自己用MyEclipse6.5手动搭建的SSH2。Mysql下测试通过。只求能够解决问题。问题解决100分马上送。
      

  2.   

    按楼主的po应该插入insert into user (username, password, id) values ('44', '44', 2c9c04ed364cedad01364ceddf240001)
    而不是insert into user (username, password, id) values (44, 44, 2c9c04ed364cedad01364ceddf240001)吧username和password都应该是string的,不是int的。
      

  3.   

    这个没事。我定义的是string。哈哈。
      

  4.   

    你hibernate的sessionFactory配置呢?贴出来看看
      

  5.   

    这个你试试    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">   
             <property name="dataSource" ref="dataSource"/> <!--数据源-->   
             <property name="mappingResources">   
                <list>   
                  ...
                </list>   
             </property>   
             <property name="hibernateProperties">   
                <value>   
                    hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect    
                    hibernate.show_sql=false <!--是否打印Hibernate执行的sql-->   
                  </value>   
             </property>   
        </bean>
      

  6.   

    nested exception is org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
    从打印的SQL看没得问题。但是为什么会抛出语法错呢?是不是你的数据库中字段名与插入的不一致。
      

  7.   


    <bean id="sessionFactory"
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="mappingResources">
                <list>
                    <value>com/zs/bean/User.hbm.xml</value>
                </list>
            </property>
            <property name="hibernateProperties">
                <props>
                <!--  
                    <prop key="hibernate.dialect">
                        org.hibernate.dialect.PostgreSQLDialect
                    </prop>
                    -->
                    <prop key="hibernate.dialect">
                        <!-- 
                        org.hibernate.dialect.Oracle9Dialect
                        org.hibernate.dialect.MySQLDialect 
                        org.hibernate.dialect.Oracle9Dialect
                        -->
                        
                        org.hibernate.dialect.PostgreSQLDialect
                        
                        
                    </prop>
                    <prop key="hibernate.show_sql">true</prop>
                </props>
            </property>
        </bean>我的sessionfactory
      

  8.   

    User.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">
    <hibernate-mapping package="org.hibernate.auction">
    <!-- MySQL 
    <class name="com.zs.bean.Users" table="user" catalog="zs">
    <id name="id" column="id"  type="int"><generator class="native"/></id>
    <property name="username" column="username" type="java.lang.String"></property>
    <property name="password" column="password" type="java.lang.String"></property>
    </class>
     -->
    <!-- PostgreSQL 数据库 -->
    <class name="com.zs.bean.Users" table="user">
    <id name="id" column="id"  type="java.lang.Integer">
    <generator class="native">
    <param name="sequence"></param>
    </generator>
    </id>
    <property name="username" column="username" type="java.lang.String"></property>
    <property name="password" column="password" type="java.lang.String"></property>
    </class>

    <!-- Oracle 数据库 -->
    <!-- start
    <class name="com.zs.bean.Users" table="zz" schema="fitact">
    <id name="id" type="java.lang.Integer">
    <column name="id" />
    <generator class="increment" />
    </id>
    <property name="username" type="string">
    <column name="username" />
    </property>
    <property name="password" type="string">
    <column name="password" />
    </property>
    </class>
    -->
    <!-- Oracle 数据库2 -->
    <!-- start 
    <class name="com.zs.bean.Users" table="zz" schema="fitact">
    <id name="id" type="java.lang.Integer">
    <column name="id" />
     <generator class="native">         
                    <param name="sequence">zz_sequence</param>
                </generator>
    </id>
    <property name="username" type="string">
    <column name="username" />
    </property>
    <property name="password" type="string">
    <column name="password" />
    </property>
    </class>
    end -->
    </hibernate-mapping>
      

  9.   

    遇到同样问题,我是使用的unitils进行Dao层测试时遇到