JPA设置默认字段及其长度详解

 更新时间:2021年12月10日 16:56:00   作者:我的天才女友  
JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。本文主要介绍了JPA如何设置默认字段及其长度,感兴趣的同学可以了解一下

使用jpa去生成对应的值的长度和默认值是如何设置的呢

@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
    String name() default "";

    boolean unique() default false;

    boolean nullable() default true;

    boolean insertable() default true;

    boolean updatable() default true;

    String columnDefinition() default "";

    String table() default "";

    int length() default 255;

    int precision() default 0;

    int scale() default 0;
}
  • name 属性用来设置字段的名字
  • unique用于设置这个字段是否是是唯一的
  • insertable和updatable、table都是和表更新相关的操作,
  • length 指定长度,默认是255
  • precision 数据长度
  • scale小数的长度
  • columnDefinition 指定这一列的信息

String

string是最常见的字段,

@Column(name = “name”)
private String name;

SQL中 name varchar(255)

生成的字段长度为255,即如果不设置长度的话默认的长度就是255个。

@Column(name = “name”,length = 50)
private String name;
name varchar(50)

@Column(name = “name”,columnDefinition=“varchar(11) COMMENT ‘用户姓名'”)
private String name;
name varchar(11) COMMENT ‘用户姓名'

这里不仅指定了长度,还给列了一个注释,便于查看

@Column(name = “name”,columnDefinition=“default ‘12345'”)
private String name;

如果我们制定默认值,这样SQL语句就会报错

create table user (id bigint not null, age integer, birth datetime(6), name default ‘12345', sex bit, primary key (id)) engine=InnoDB

如果我们制定长度呢

@Column(name = “name”,columnDefinition=“default ‘12345'”,length = 25)
private String name;

运行的DDL语句依然无法创建出表

create table user (id bigint not null, age integer, birth datetime(6), name default ‘12345', sex bit, primary key (id)) engine=InnoDB

如何给String字段指定默认值呢

所以如果指定columnDefinition这个属性会覆盖原来的列注解的长度,而且在其注解的中必须制定列的类型

   /**
     * (Optional) The SQL fragment that is used when 
     * generating the DDL for the column.
     * <p> Defaults to the generated SQL to create a
     * column of the inferred type.
     */
    String columnDefinition() default "";
/**
*(可选)在以下情况下使用的SQL片段:
*正在为列生成DDL。
*默认使用生成的SQL来创建推断类型的列。
*/
@Column(name = “name”,columnDefinition=" varchar(11) default ‘12345'",length = 25)
private String name;
create table user (id bigint not null, age integer, birth datetime(6), name varchar(11) default ‘12345', sex bit, primary key (id)) engine=InnoDB

columnDefinition 会将其中的值作为列名之后,如果在这里设置默认值,必须保证直接加在列名之后执行不会出错。

定义 Integer 和 Long 有区别吗

Long的默认长度为20,Integer的默认长度为11

定义Integer和int有区别吗

区别是int如果你不给他设置就会默认为0

boolean和Boolean也是一样的。

boolean类型

默认长度为1

@Column(name = “sex”)
private Boolean sex;

@Column(name = “sex”)
private boolean sex;

二者没有什么区别,如果我们将boolean设置默认值并且设置长度会咋样呢?

@Column(name = “sex”,length = 50)
private boolean sex;

生成的DDL语句中并没有长度的属性。所以在boolean类型中设置长度属性是没有作用的

create table user (id bigint not null, age integer, birth datetime(6), name varchar(255), sex bit, primary key (id)) engine=InnoDB

指定boolean类型的默认值呢

@Column(name = “sex”,columnDefinition = “bit(1) default 1”)
private boolean sex;

有注意,如果指定默认值为1,即是true,属性如果不指定,boolean的默认值就是false,所以会将false设置到对应的数据中,如果指定Boolean呢

如果指定Boolean的话,没有设置默认就是null,就会将空更新到数据库中,最好用的方法还是在java类中设置默认值。

日期

默认的日期格式不具有可读性

@Column(name = "birth")
private Date birth;

使用@Temporal来制定格式

	@Temporal(TemporalType.DATE)
	@Column(name = "birth")
	private Date birth;

@Temporal有三个值

  • DATE 只有日期
  • TIME 只有时间 时分秒
  • TIMESTAMP 日期和时间都有

浮点数格式的设置

@Column(name = “age”,scale = 2)
private int age;

age integer,属性为scale = 2没有作用

@Column(name = “age”,scale = 2)
private float age;

@Column(name = “age”,precision = 5,scale = 2)
private float age;

还是没有用,指定数据格式为double,依然没有用

@Column(name = “age”,columnDefinition = “decimal(5,2)”)
private double age;

大文本

	/**
	 * 备注
	 */
   	@Basic(fetch = FetchType.LAZY)
	@Type(type = "text")
	@Lob
	@Column(name = "remark")
	private String remark;

@Lob 指定该文本为长文本

@Basic(fetch = FetchType.LAZY) 长文本缓加载,便于数据的读取。 

以上就是JPA设置默认字段及其长度详解的详细内容,更多关于JPA设置默认字段及长度的资料请关注脚本之家其它相关文章!

相关文章

  • 线程安全的单例模式的几种实现方法分享

    线程安全的单例模式的几种实现方法分享

    线程安全的单例模式实现有几种思路,个人认为第2种方案最优雅:、饿汉式、借助内部类、普通加锁解决、双重检测,但要注意写法,如果单体模式继续扩展为N元单体模式,那就是对象池模式了
    2014-02-02
  • scala中常用特殊符号详解

    scala中常用特殊符号详解

    这篇文章主要介绍了scala中常用特殊符号详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • java大话之创建型设计模式教程示例

    java大话之创建型设计模式教程示例

    这篇文章主要为大家介绍了java大话之创建型设计模式教程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • C# 数据类型转换

    C# 数据类型转换

    这篇文章主要讲解C语言中基本数据类型、字符串与其它数据类型以及常见的日期类型的转换,希望能给大家做一个参考。希望能够给你带来帮助
    2021-07-07
  • Java实践练习轻松几行实现追书神器

    Java实践练习轻松几行实现追书神器

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用Java实现一个追书神器,用技术改变生活,大家可以在过程中查缺补漏,提升水平
    2021-10-10
  • 解读线程池-Executors的newSingleThreadExecutor和newFixedThreadPool(1)区别

    解读线程池-Executors的newSingleThreadExecutor和newFixedThreadPool(1

    这篇文章主要介绍了解读线程池-Executors的newSingleThreadExecutor和newFixedThreadPool(1)区别,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 解析Java内存分配和回收策略以及MinorGC、MajorGC、FullGC

    解析Java内存分配和回收策略以及MinorGC、MajorGC、FullGC

    本节将会介绍一下:对象的内存分配与回收策略;对象何时进入新生代、老年代;MinorGC、MajorGC、FullGC的定义区别和触发条件;还有通过图示展示了GC的过程。
    2021-09-09
  • Java常用类库Apache Commons工具类说明及使用实例详解

    Java常用类库Apache Commons工具类说明及使用实例详解

    这篇文章主要介绍了Java常用类库Apache Commons工具类说明及使用实例详解,需要的朋友可以参考下
    2020-02-02
  • SpringBoot+jsp项目启动出现404的解决方法

    SpringBoot+jsp项目启动出现404的解决方法

    这篇文章主要介绍了SpringBoot+jsp项目启动出现404的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • logback的LevelFilter日志过滤器源码解读

    logback的LevelFilter日志过滤器源码解读

    这篇文章主要为大家介绍了logback的LevelFilter日志过滤器源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11

最新评论