SpringDataJPA中的insert方法,有如同MyBatis中的insertSelective之类的写法?
[实际现象]
长期使用MyBatis, 利用Mybatis的工具(Mybatis Generator/ 通用Mapper), 可以有类似 insertSelective(E) 之类的方法.
其实就是映射如下SQL写法( 有很多字段有默认值, insert时只需要部分值就可以了)
CREATE TABLE `TABLENAME` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'PRIMARY KEY' ,
name VARCHAR(1000) NOT NULL ,
`deleted` tinyint UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否已经被删除' ,
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间' ,
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '被更新时间' ,
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='TABLENAME';
插入数据(希望spring data 能映射到这个)
INSERT INTO tablename (name) VALUES('NAME1');
但是spring data 在调用 insert(E)时, 需要将E的所有非NULL属性全部赋值(比如这里的 create_time, 但是其实我并不care, 因为数据库已经处理了)
[预期现象 & 我要做什么]
- 希望spring data , 在insert(E)数据时, 能够只提供部分值.( 具体来说, 就是有mybatis 中的那种insertSelective 方法 )
- insert时,生成的sql 语言, 只处理我的实体中的 非 null 值, 不要去处理 null 值
[代码]
SQL
如上
Entity
public class Person {
private Long id;
private String name;
private Boolean deleted;
private Date createTime;
private Date updateTime;
}
Repository
public interface IPersonRepository extends JpaRepository<Person>{
}
Service
public class PersonService {
public void insert() {
final Person p = new Person();
p.setName("name1");
this.personRepository.insert(p); // 会报错
}
}
[上下文环境(重要语境)] && [场景]
- mysql 5.7 服务端
- spring boot 1.5
- spring data jpa
- @Repository
[尝试解决 & 我的推测]
- google 搜索
加入
@Column(insertable=false)
private Date createTime;
但是, 这显然不是我所要的, 大家可以实际动手试试
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
@DynamicInsert