欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-16 19:21:11
目录string定义 integer 和 long 有区别吗定义integer和int有区别吗boolean类型日期浮点数格式的设置大文本使用jpa去生成对应的值的长度和默认值是如何设置的呢@targ...

使用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)

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

@column(name = “name”,columndefinition=“varchar(11) comment ‘用户姓名'”)
private string name;
name varchar(11) comment ‘用户姓名'

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

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

@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 会将其中的值作为列名之后,如果在这里设置默认值,必须保证直接加在列名之后执行不会出错。

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

定义 integer 和 long 有区别吗

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

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

long的默认长度为20,integer的默认长度为11

定义integer和int有区别吗

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

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

boolean和boolean也是一样的。

boolean类型

默认长度为1

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

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

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

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

二者没有什么区别,如果我们将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;

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

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

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

日期

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

@column(name = "birth")
private date birth;

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

使用@temporal来制定格式

	@temporal(temporaltype.date)
	@column(name = "birth")
	private date birth;

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

@temporal有三个值

  • date 只有日期
  • time 只有时间 时分秒
  • timestamp 日期和时间都有

浮点数格式的设置

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

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

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

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

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

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

@column(name = “age”,columndefinition = “decimal(5,2)”)
private double age;

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

大文本

	/**
	 * 备注
	 */
   	@basic(fetch = fetchtype.lazy)
	@type(type = "text")
	@lob
	@column(name = "remark")
	private string remark;

@lob 指定该文本为长文本

@basic(fetch = fetchtype.lazy) 长文本缓加载,便于数据的读取。 

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