欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

hibernate中的“坑”

程序员文章站 2022-03-15 14:03:19
...

1. 新建时save()接口返回的对象就是参数对象

hibernate中的“坑”
所以如果想利用保存来获取数据里各个字段默认值的时候要小心。比如下面的例子。

class A {
    protected Long id;
    protected LocalDateTime createTime;
    protected LocalDateTime updateTime;
}
A a=save(new A());
// 此时,a的id仍然为空

2. 注意@DynamicInsert和@DynamicUpdate的不同

hibernate中的“坑”
hibernate中的“坑”
@DynamicInsert 是用非空的列来组装sql
@DynamicUpdate 是用改变的列来组装sql

下面是一个常见的场景:
提供给前端页面用来保存数据的接口,一般传入的参数比数据库中的字段少。比如数据库中有10列,但前端界面可以修改的只有3列,前端传入的参数也只有这3个属性,最终保存之前,由参数转化成的entity应该是3个属性有值,而其它属性为null。这时如果直接保存,会把数据库中其它7个属性都置为空。原因就是这两个注解很容易混淆,@DynamicUpdate 是用改变的列来组装sql,而不是非空的列。

正确的做法是应该先从数据库中把旧对象给查出来,再把新对象缺少的属性从旧对象复制过去,然后再保存。(一点都不智能ヽ(`Д´)ノ)