mysql inserselective_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;

但是, 这显然不是我所要的, 大家可以实际动手试试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值