记录一个使用Spring Data JPA设置默认值的问题

目录
  • Spring Data JPA设置默认值的问题
    • 一开始经过百度,写法是这样的
    • 于是改了第二版
    • 在大佬的指点下,有了第三种写法
  • Jpa设置默认值约束
    • 1、修改建表时的列定义属性
    • 2、通过Hibernate(org.hibernate.annotations.ColumnDefault)

Spring Data JPA设置默认值的问题

我有一个entity实体,其中里面有一个布尔类型的字段:

//entity table注解略
public class TableEntity {
    private Boolean b;
 public Boolean getB() {
        return b;
    }
    public void setB(Boolean b) {
        this.b= b;
    }
}

然后现在是需要给这个布尔型变量设默认值true

一开始经过百度,写法是这样的

//entity table注解略
public class TableEntity {
 @Column(name = "b", columnDefinition = "bit default 1", nullable = false)
    private Boolean b;
 public Boolean getB() {
        return b;
    }
    public void setB(Boolean b) {
        this.b= b;
    }
}

这个写法其实应该没什么问题,当时的数据库是sql server,但是在换环境部署,切换到MySQL的时候出了问题,被怀疑是我这里写的问题(其实我总感觉应该没什么关系)

于是改了第二版

//entity table注解略
public class TableEntity {
 @Column(name = "b", nullable = false)
    @org.hibernate.annotations.Type(type = "yes_no")
    private Boolean b = true;
 public Boolean getB() {
        return b;
    }
    public void setB(Boolean b) {
        this.b= b;
    }
}

直接把私有属性值赋值,这也是通过百度之后,有部分文章说的一种方法,至于type那个注解,就是把布尔型变量在数据库中通过字符型变量来存储,存储"Y"或者"N"。

但是这个写法,工程跑起来之后还是有问题的,存不上默认值,等于白写。

在大佬的指点下,有了第三种写法

//entity table注解略
public class TableEntity {
 @Column(name = "b", nullable = false)
    @org.hibernate.annotations.Type(type = "yes_no")
    private Boolean b = true;
 public Boolean getB() {
        if(b==null) {
            return true;
        }
        return b;
    }
    public void setB(Boolean b) {
        if(b==null) {
            return;
        }
        this.b= b;
    }
}

大概意思是,在JPA进行保存的时候框架内部会自己调用get/set方法来进行属性赋值和取值,所以直接在get/set方法进行默认值的赋值就可以了。

实际测试效果拔群。

Jpa设置默认值约束

使用SpringDataJpa设置字段的默认值约束的2种方式

1、修改建表时的列定义属性

@Column(columnDefinition="INT DEFAULT '1'")
private Integer status;

2、通过Hibernate(org.hibernate.annotations.ColumnDefault)

下提供的注解进行设置默认值

@ColumnDefault("1")
private Integer status;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Spring Boot中使用Spring-data-jpa的配置方法详解

    为了解决这些大量枯燥的数据操作语句,我们第一个想到的是使用ORM框架,比如:hibernate.通过整合Hibernate之后,我们以操作Java实体的方式最终将数据改变映射到数据库表中. 为了解决抽象各个Java实体基本的"增删改查"操作,我们通常会以泛型的方式封装一个模板Dao来进行抽象简化,但是这样依然不是很方便,我们需要针对每个实体编写一个继承自泛型模板Dao的接口,再编写该接口的实现.虽然一些基础的数据访问已经可以得到很好的复用,但是在代码结构上针对每个实体都会有一堆Dao的

  • spring data jpa使用详解(推荐)

    使用Spring data JPA开发已经有一段时间了,这期间学习了一些东西,也遇到了一些问题,在这里和大家分享一下. 前言: Spring data简介: Spring Data是一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务. Spring Data 包含多个子项目: Commons - 提供共享的基础框架,适合各个子项目使用,支持跨数据库持久化 JPA - 简化创建 JPA 数据访问层和跨存储的持久层

  • 详解Spring Data Jpa当属性为Null也更新的完美解决方案

    开场白 我本来是一名android开发者,突然就对java后端产生了浓烈的兴趣.所以,立马就转到了后端.第一个项目使用的使用Spring Data Jpa来操作数据库的,可是在更新数据的时候发现一个问题,属性值为Null竟然也更新,这就会导致本来没有更新的属性值,全部就成了Null. 原因 经过一番度娘操作,原来Jpa,不知道你是想把属性设置为Null,还是不想. 解决方法 找到一个方法,就是在数据模型上加上注解@DynamicUpdate,可是发现并不好使.而后经过整理,找到以下解决方案 我们

  • 使用Spring Data JPA的坑点记录总结

    前言 Spring-data-jpa的基本介绍:JPA诞生的缘由是为了整合第三方ORM框架,建立一种标准的方式,百度百科说是JDK为了实现ORM的天下归一,目前也是在按照这个方向发展,但是还没能完全实现.在ORM框架中,Hibernate是一支很大的部队,使用很广泛,也很方便,能力也很强,同时Hibernate也是和JPA整合的比较良好,我们可以认为JPA是标准,事实上也是,JPA几乎都是接口,实现都是Hibernate在做,宏观上面看,在JPA的统一之下Hibernate很良好的运行. 最近在

  • 记录一个使用Spring Data JPA设置默认值的问题

    目录 Spring Data JPA设置默认值的问题 一开始经过百度,写法是这样的 于是改了第二版 在大佬的指点下,有了第三种写法 Jpa设置默认值约束 1.修改建表时的列定义属性 2.通过Hibernate(org.hibernate.annotations.ColumnDefault) Spring Data JPA设置默认值的问题 我有一个entity实体,其中里面有一个布尔类型的字段: //entity table注解略 public class TableEntity { privat

  • Spring Data JPA 设置字段默认值方式

    目录 Spring Data JPA设置字段默认值 Spring Data JPA设置字段默认值失败 Spring Data JPA设置字段默认值 在Column注解中写入以下两个属性,为什么自己查一下文档吧,即可实现字段默认值设置,并顺带解决save方法所生成的sql语句中自动填充字段为null的问题. 默认值无法更新,所以如果想在代码里修改字段默认值,你需要重新建表. @Column(insertable = false,columnDefinition = "int default 1&q

  • 基于spring data jpa @query返回map的踩坑记录

    目录 spring data jpa @query返回map踩坑记录 设置JPA的Query返回Map对象 spring data jpa @query返回map踩坑记录 最近用spring data jpa,网上看的一些教程,有的说是返回的Object[]数组,有的说是直接返回的对象,亲身验证了一下,发现主要看写法和返回结果. 用的版本是这样的: dao代码如下: public interface UserRepository extends JpaRepository<User, Integ

  • Spring Data JPA的Audit功能审计数据库的变更

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 数据库审计 数据库审计是指当数据库有记录变更时,可以记录数据库的变更时间和变更人等,这样以后出问题回溯问责也比较方便.对于审计表记录的变更可以两种方式,一种是建立一张审计表专门用于记录,另一种是在数据库增加字段.本文所讨论的是第二种方案. 那如何在新增.修改.删除的时候同时增加记录呢?如果每张表都单独记录,代码就会显得很冗余.更好的方式应该是做切面或者事件监听,当数据有变更时统一进行记录. 2 Spring Dat

  • Spring Data JPA踩坑记录(@id @GeneratedValue)

    目录 Spring Data JPA踩坑记录 JPA踩坑:No property xxx found for type xxx 问题发现 问题解决 Spring Data JPA踩坑记录 最近在做自己的一个项目时 使用了spring jpa 由于数据库用的是mysql 在给实体类entity 的id给注解时@Id遇到了一个坑 自己找了许久才在stackoverflow 上找到了答案 注意 再查询数据库的时候并不会因此报错 而当你的主键是自增的时候 在添加数据的时候就会报错了 看看我们的实体类 注

  • spring data jpa查询一个实体类的部分属性方式

    目录 springdatajpa查询一个实体类的部分属性 首先我们定义两个实体类 然后创建person实体类的repository 返回结果只包含firstName和lastName两个属性 springdatajpa查询部分字段.多余附加字段 第一种方法:使用model查询时转化 第二种方法:在service里边转换成JSON 第三种方法:select语句部分字段使用默认值 spring data jpa查询一个实体类的部分属性 使用Spring Data Repository查询时候,通常情

  • 使用Spring Data Jpa的CriteriaQuery一个陷阱

    使用Spring Data Jpa的CriteriaQuery进行动态条件查询时,可能会遇到一个陷阱,当条件为空时,查询不到任何结果,并不是期望的返回所有结果.这是为什么呢? 例如下述代码,当predicates为空时,返回结果总是为空. public Page<VmhostWithRelationPO> listVmhostSpecWithRelationByPage(String name) { Specification<VmhostWithRelationPO> spec

  • Spring Data JPA 实体类中常用注解说明

    目录 javax.persistence 介绍 基本注解 关联关系注解 关于关系查询的一些注意事项 javax.persistence 介绍 Spring Data JPA 采用约定大于配置的思想,默认了很多东西 JPA是存储业务实体关联的实体来源,它显示定义了如何定义一个面向普通Java对象(POJO)作为实体,以及如何与管理关系实体提供一套标准 javax.persistence位于hibernate-jpa-**.jar 包里面 jpa类层次结构: JPA类层次结构的显示单元: 单元 描述

  • Spring data jpa @Query update的坑及解决

    目录 Springdatajpa@Queryupdate的坑 可以参考这个例子 Springdatajpa的update操作 1.调用保存实体的方法 2.@Query注解,自己写JPQL语句 Spring data jpa @Query update的坑 jpa默认只有save(Entity)方法,如果数据库中没有记录就新增,如果数据库中有记录就更新记录. 如果要手动添加update(Entity)方法, 可以参考这个例子  @Modifying  @Query(value = "UPDATE

随机推荐