新添加数据,保存时报错?
来源: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数据内容),解析入库用单独的实体类(转为解析入库应用),数据应用再对应数据库定义实体类(正常业务应用),指教?
032017-12-12 -
慕姐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();
00 -
廖师兄
2017-12-09
既然设置为非空,说明这个字段一定要有值。“添加时只传入了部分属性值”做法不对,你要设置所有非空的属性
00
相似问题