yhao80
2011-05-13 11:34
浏览 310
已采纳

使用this.hibernateTemplate.save(c);报不能将值 NULL 插入列 'OrdeID'

DAO:
public void add(Order c) {
System.out.println(c.getOrdeID()); //有值输出
this.hibernateTemplate.save(c);
}

SQL:
create table _Order(
OrdeID char(12) primary key not null,

ProductCode char(12) not null,

Quantity int not null,

BusinessName varchar(1000) null
)

出现下面问题:
Hibernate: insert into _Order (businessName, productCode, quantity) values (?, ?, ?)
11:27:37,093 WARN org.hibernate.util.JDBCExceptionReporter:100 - SQL Error: 515, SQLState: 23000
11:27:37,109 ERROR org.hibernate.util.JDBCExceptionReporter:101 - 不能将值 NULL 插入列 'OrdeID',表 'MES.dbo._Order';列不允许有空值。INSERT 失败。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • fmjsjx 2011-05-13 13:39
    已采纳

    [quote]是吧
    @Id
    @GeneratedValue 删了吗? [/quote]
    @GeneratedValue删了试试,只留@Id应该就ok了。
    不行的话@GenerateValue()里应该还有参数的,记得是generatedType什么的,是个枚举类型,里面应该有不生成策略的。

    点赞 打赏 评论
  • redstarofsleep 2011-05-13 12:07

    你的orderId在Bean里面是怎么定义的,是否违反了JavaBean规约?

    orderId???
    orderID???

    要定义成orderId

    点赞 打赏 评论
  • redstarofsleep 2011-05-13 12:16

    [quote]
    private String OrdeID;
    private String ProductCode;
    private int Quantity;
    private String BusinessName;
    [/quote]
    这些有问题,要以小写开头,驼峰式命名,不要出现连续2个大写的。

    get/set方法嘛,让eclipse重新自动生成一遍吧

    点赞 打赏 评论
  • redstarofsleep 2011-05-13 12:33

    [quote]private String ordeID; [/quote]
    要改成orderId

    点赞 打赏 评论
  • cbcgkx 2011-05-13 12:59

    Shift+Alt+s 然后 Ctrl+r 可以出现选择生成get/set方法的窗口

    自己手写get/set难免会出现错误 保证了规范 在去解决其它的

    点赞 打赏 评论
  • fmjsjx 2011-05-13 12:59

    ordeID是主键,但是你既没有配置主键的生成策略,又没有设置主键的值,当然插入不成功的。
    解决方案有几种:
    1.配置主键生成策略,这个记不太清了,记得可以是让数据库自己生成,也可以委托hibernate生成,具体情况最好看下官方文档;
    2.自己做个ID系统来生成主键,可以是一个方法,也可以是一台远程服务器,这个要看具体需求。

    点赞 打赏 评论
  • fmjsjx 2011-05-13 13:01

    [quote]ordeID是主键,但是你既没有配置主键的生成策略,又没有设置主键的值,当然插入不成功的。
    解决方案有几种:
    1.配置主键生成策略,这个记不太清了,记得可以是让数据库自己生成,也可以委托hibernate生成,具体情况最好看下官方文档;
    2.自己做个ID系统来生成主键,可以是一个方法,也可以是一台远程服务器,这个要看具体需求。[/quote]
    ……
    没看仔细,原来是有ID的,那就有可能是mapping配置的问题了。

    点赞 打赏 评论
  • fmjsjx 2011-05-13 13:07

    [quote]……
    没看仔细,原来是有ID的,那就有可能是mapping配置的问题了。[/quote]
    根据分析,hibernate mapping配置的问题可能出在这里:
    看控制台异常输出,OrderID根本没有加到insert语句里去,很可能是你把主键生成策略设置成数据库自动生成了,那么hibernate生成insert SQL语句时是不会传入主键的,要把生成策略删掉。

    点赞 打赏 评论

相关推荐 更多相似问题