您好,登錄后才能下訂單哦!
本篇文章為大家展示了JPA如何設置默認字段及其長度,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
使用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 數(shù)據(jù)長度
scale小數(shù)的長度
columnDefinition 指定這一列的信息
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語句依然無法創(chuàng)建出表
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來創(chuàng)建推斷類型的列。 */
@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 會將其中的值作為列名之后,如果在這里設置默認值,必須保證直接加在列名之后執(zhí)行不會出錯。
Long的默認長度為20,Integer的默認長度為11
區(qū)別是int如果你不給他設置就會默認為0
boolean和Boolean也是一樣的。
默認長度為1
@Column(name = “sex”) private Boolean sex;
@Column(name = “sex”) private boolean sex;
二者沒有什么區(qū)別,如果我們將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設置到對應的數(shù)據(jù)中,如果指定Boolean呢
如果指定Boolean的話,沒有設置默認就是null,就會將空更新到數(shù)據(jù)庫中,最好用的方法還是在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;
還是沒有用,指定數(shù)據(jù)格式為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) 長文本緩加載,便于數(shù)據(jù)的讀取。
上述內(nèi)容就是JPA如何設置默認字段及其長度,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。