新添加数据,保存时报错?

来源:5-1 买家商品-dao

慕姐6071067

2017-12-09

问题如题,详细是:

错误原因是数据库里所添加表的记录有非空字段,添加时只传入了部分属性值,程序将其他非传入的属性字段制NULL传入而报错,请问老师程序段,有何处理方法?(数据字段为非NULL,但设有默认)

写回答

3回答

慕姐6071067

提问者

2017-12-10

追加个问题,麻烦了

前两列是oracle数据库,后两列是对应的mysql数据库字段类型的转换

Z19001_201_CHAR    VARCHAR2(1000)    z19001_201_char    varchar(1000)    

Z30021                      NUMBER(10,4)         z30021                   decimal(10,4)    

Z90029_066               NUMBER(6)             z90029_066            decimal(6)    

问题是:

1、为了统一,我把NUMBER都对应转为decimal,其实decimal(6)在java里被定义为Integer(代码自动生成),带小数位decimal(10,4) 才被定义为BigDecimal,是否也应该把decimal(6)也定义为BigDecimal?

2、数据库中的tinyint(1)类型通过生成器,自动转为了boolean,我给手动改为Integer。boolean只能代表0、1两个值,tinyint(1)是为了做多个数字标记值,希望给指导和建议?

3、z90029_066字段值,java实体类属性直接转为z90029066,总感觉怪怪的(字段命名不能改),给建议?

4、数据是解析txt,读取后转为Map的List集合集,上面4列是记录数据是对应数据表的字段,取出第三列作为map的key(与txt数据文件是头部标题是对应的),值就是map的value。问题是:

4.1、动态取出map,保存赋予实体,必须实体的属性名与数据库的字段名要一致(属性名不能按照驼峰式命名)?

4.2、解析txt取出的值存储map都为String类型,但实体类的属性定义有Integer、Date等其他类型,无法直接保存入库(报错)?

4.3、有一想法,还未测试,把解析入库的实体类的数据属性都定义为String(id和两个date除外,是非txt数据内容),解析入库用单独的实体类(转为解析入库应用),数据应用再对应数据库定义实体类(正常业务应用),指教?


0
3
廖师兄
回复
慕姐6071067
因为说的是课程外的问题,听你这样描述下来,我不是太理解具体业务和需求,没能帮上忙,不好意思。
2017-12-12
共3条回复

慕姐6071067

提问者

2017-12-10

首先,非常感谢师兄!

我现在的做法是,把实体类的默认属性值与数据库字段默认值对应,都自动设置好。

定义实体类,默认值有统一规范,设为枚举变量,赋予属性值初始化,类型有String、Integer、Date等

其中注解用了@DynamicUpdate方式,create_time和update_time就无需设置默认值了吧?

部分代码如下,请师兄指教:

    /**

     * 备注

     */

    private String remark= CommonEnum.EMPTYSTRING.getStringCode();

    /**

     * 状态(0:开放,1:关闭)

     */

    private Integer status= CommonEnum.ZEROINTEGER.getIntegerCode();

    /**

     * 删除状态(0:否,1:是)

     */

    @Column(name = "del_status")

    private Integer delStatus=CommonEnum.ZEROINTEGER.getIntegerCode();

    /**

     * 创建时间

     */

    @Column(name = "create_time")

    private Date createTime=CommonEnum.SYSTEMTIME.getSysTime();

    /**

     * 修改时间

     */

    @Column(name = "update_time")

    private Date updateTime=CommonEnum.SYSTEMTIME.getSysTime();

0
0

廖师兄

2017-12-09

既然设置为非空,说明这个字段一定要有值。“添加时只传入了部分属性值”做法不对,你要设置所有非空的属性

0
0

Spring Boot双版本(1.5/2.1) 打造企业级微信点餐系统

从0到1开发中小型企业级Java应用,并学会迭代重构技巧

6410 学习 · 5247 问题

查看课程