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

 更新时间:2021年11月23日 11:40:31   作者:qq_34785454  
这篇文章主要介绍了使用Spring Data JPA设置默认值的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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;

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

相关文章

  • Java多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask详解

    Java多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask详解

    这篇文章主要介绍了Java多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • SpringBoot 多数据源及事务解决方案小结

    SpringBoot 多数据源及事务解决方案小结

    本文主要介绍了多数据源管理的解决方案(应用层事务,而非XA二段提交保证),以及对多个库同时操作的事务管理,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • Java中int和Integer的区别

    Java中int和Integer的区别

    这篇文章主要介绍的是 Java中int和Integer的区别,Java 是一种强数据类型的语言,因此所有的属性必须有一个数据类型,下面文章基于Java详细int和Integer有何区别,需要的朋友可以参考一下
    2021-11-11
  • java 集合之实现类ArrayList和LinkedList的方法

    java 集合之实现类ArrayList和LinkedList的方法

    下面小编就为大家带来一篇java 集合之实现类ArrayList和LinkedList的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • spring配置不扫描service层的原因解答

    spring配置不扫描service层的原因解答

    这篇文章主要介绍了spring配置不扫描service层的原因解答,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Swing常用组件之文本框和文本区

    Swing常用组件之文本框和文本区

    这篇文章主要为大家详细介绍了Swing常用组件之文本框(JTestField)和文本区(JTextArea),Swing是一个用于开发Java应用程序用户界面的开发工具包,本文开始带大家学习Swing
    2016-05-05
  • spring单例如何改多例

    spring单例如何改多例

    这篇文章主要介绍了spring单例如何改多例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 很详细的Log4j配置步骤

    很详细的Log4j配置步骤

    Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。
    2008-11-11
  • java数据结构基础:顺序队列和循环队列

    java数据结构基础:顺序队列和循环队列

    下面小编就为大家分享一篇java队列实现方法(顺序队列,循环队列),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-08-08
  • 如何通过Java实现加密、解密Word文档

    如何通过Java实现加密、解密Word文档

    这篇文章主要介绍了如何通过Java实现加密、解密Word文档,对一些重要文档,常需要对文件进行加密,查看文件时,需要正确输入密码才能打开文件。下面介绍了一种比较简单的方法给Word文件加密以及如何给已加密的Word文件解除密码保护,需要的朋友可以参考下
    2019-07-07

最新评论