1. 如果我们建表时,使用了设置默认值 ↓ ( 时间,sex 字段被设置默认值) ```java import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import org.hibernate.annotations.GenericGenerator;

    import javax.persistence.*;

    /**

    • @author tn
    • @version 1
    • @ClassName TestDemo
    • @description 测试
    • @date 2020/10/2 10:16 */ @Entity @Table(name =”test_demo”,schema = “test”) @org.hibernate.annotations.Table(appliesTo = “test_demo”,comment = “test_demo”) @Getter @Setter @Accessors(chain = true) @DynamicUpdate //动态赋值 @DynamicInsert //动态插入 public class TestDemo { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(columnDefinition=”int COMMENT ‘主键,自动生成’”) @ApiModelProperty(value = “id”) private Integer id;

      /**

      • 全系统唯一 */ @Column(columnDefinition=” varchar(36) COMMENT ‘全系统唯一uuid’”) @ApiModelProperty(value=”uuid”) @GeneratedValue(generator = “uuid”) @GenericGenerator(name = “uuid”, strategy = “org.hibernate.id.UUIDGenerator”) private String uuid;

        @Column(columnDefinition = “ varchar(100) not null comment ‘名字’” ) private String name;

        @Column(name = “sex”,columnDefinition=”varchar(100) default ‘男’ COMMENT ‘字典名’”) private String sex;

    1. /**
    2. * 表示该字段为创建时间字段,
    3. */
    4. @ApiModelProperty(value = "创建时间",hidden=true)
    5. @Column(columnDefinition = "timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建日期' ")
    6. private String createTime;
    7. /**
    8. * 表示该字段为创建人,
    9. */
    10. @ApiModelProperty(value = "创建人",hidden=true)
    11. @Column(columnDefinition = "varchar(100) COMMENT '创建人'")
    12. private String createBy;
    13. /**
    14. * 表示该字段为修改时间字段,
    15. */
    16. @ApiModelProperty(value = "修改时间",hidden=true)
    17. @Column(columnDefinition = "timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日期'")
    18. private String updateTime;
    19. /**
    20. * 表示该字段为修改人,
    21. */
    22. @ApiModelProperty(value = "修改人",hidden=true)
    23. @Column(columnDefinition = "varchar(100) COMMENT '更新人'")
    24. private String updateBy;

    }

    1. 2. 使用save 方法后直接抛出存入的数据 ,得到的结果如下
    2. ```java
    3. /**
    4. * 新增成功后返回的数据是缓存里的所以没有数据库里默认的数据
    5. * @param jpaDemo
    6. * @return
    7. */
    8. @GetMapping("addTestDemo")
    9. @ApiOperationSupport(ignoreParameters = {"id","uuid"})//ui中隐藏id字段
    10. @ApiOperation(value = "新增数据TestDemo",notes = "新增数据")
    11. public ResultVO<TestDemo> addTestDemo(TestDemo jpaDemo){
    12. TestDemo save = testDemo.save(jpaDemo);
    13. return ResultVO.resultDataMsgForT(save!=null,save,"新增");
    14. }
    15. {
    16. "code": 0,
    17. "message": "新增成功",
    18. "data": {
    19. "id": 5,
    20. "uuid": null,
    21. "name": "去",
    22. "sex": null,
    23. "createTime": null,
    24. "createBy": null,
    25. "updateTime": null,
    26. "updateBy": null
    27. },
    28. "ts": 1601607038408,
    29. "success": true
    30. }
    1. 使用 查询语句重新查询一次的结果 如下 ↓ ```java @GetMapping(“findAllTestDemo”) @ApiOperation(value = “findAllTestDemo”) public ResultVO findAllTestDemo(){
      1. return ResultVO.success(testDemo.findAll());
      }

      { “code”: 0, “message”: “success”, “data”: [ { “id”: 5, “uuid”: null, “name”: “去”, “sex”: “男”, “createTime”: “2020-10-02 10:50:38”, “createBy”: null, “updateTime”: “2020-10-02 10:50:38”, “updateBy”: null } ], “ts”: 1601607043977, “success”: true } ```

      1. 原因
        1. 我们保存时,新增的数据是放在缓存中的,保存成功后会直接把缓存的值还给save用作返回值,我们存储时没有输入sex 跟 时间,这两个数据是 mysql提供的,所以缓存中没有,导致返回值里也没有相关数据。
        2. 我们查询时是查询的数据库,所以有数据了
        3. 小知识
          1. JPA和hibernate一样默认是开启一级缓存的,也就是EntityManager层的缓存,二级缓存是作用在EntityManagerFactory层的,默认是关闭的,需要显示开启