文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

使用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;
}

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这个属性会覆盖原来的列注解的长度,而且在其注解的中必须制定列的类型


   
    String columnDefinition() default "";


@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有三个值

浮点数格式的设置


@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设置默认字段及长度的资料请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯