最王座 2014-08-20 08:55 采纳率: 0%
浏览 17766

hibernate执行保存对象时出现异常:org.hibernate.exception.GenericJDBCException

hibernate执行保存对象时出现异常:
org.hibernate.exception.GenericJDBCException: could not insert: [com.hibernate.domain.User] Caused by: java.sql.SQLException: Field 'user_id' doesn't have a default value

具体的代码和配置如下:
hibernate.cfg.xml:


<!-- Database connection settings -->
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/hibernate3
root
ytkj

    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection.pool_size">1</property>

    <!-- SQL dialect -->
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

    <!-- Enable Hibernate's automatic session context management -->
    <!-- <property name="current_session_context_class">thread</property>  -->

    <!-- Disable the second-level cache  -->
    <!-- <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>  -->

    <!-- Echo all executed SQL to stdout -->
    <!-- show sql dml -->
    <property name="show_sql">true</property>

    <!-- Drop and re-create the database schema on startup -->
    <!-- <property name="hbm2ddl.auto">update</property>  -->

    <mapping resource="com/hibernate/domain/User.hbm.xml"/>

</session-factory>

建表语句(成功):
CREATE TABLE t_user (
user_id int(11) NOT NULL,
user_name varchar(20) default NULL,
user_age int(11) default NULL,
PRIMARY KEY (user_id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

测试类:
package com.hibernate.manager;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import com.hibernate.domain.User;
import com.hibernate.util.HibernateUtil;

public class UserManager {
public static void main(String[] args) {
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
Transaction ts = session.beginTransaction();

    User user = new User();
    user.setId(1);
    user.setName("zhangsan");
    user.setAge(21);
    session.save(user);
    ts.commit();

    session.close();
    sessionFactory.close();
}

}

User.hbm.xml:





<!-- -->


以上代码执行过后,就包上面的异常。
如果不使用id生成策略(及时没有generator标签),则可以insert成功。
请问这问题是出在哪里?高手指点。

  • 写回答

2条回答 默认 最新

  • 最王座 2014-08-20 09:26
    关注

    我知道了,是我的建表语句有问题应该是:
    CREATE TABLE t_user (
    user_id int(11) NOT NULL auto_increment,
    user_name varchar(20) default NULL,
    user_age int(11) default NULL,
    PRIMARY KEY (user_id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    我少了auto_increment,但是在mysql情况下,少了是会出错的。
    因为,这时候的id的生成策略native, id是自动生成的,只要在建表的时候指定为auto_increment即可。

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?