1. 程式人生 > >JPA的@Column()註解詳解

JPA的@Column()註解詳解

就像@Table註解用來標識實體類與資料表的對應關係類似,@Column註解來標識實體類中屬性與資料表中欄位的對應關係。

該註解的定義如下:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package javax.persistence;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import 
java.lang.annotation.Target; @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; }

從定義可以看出,@Column註解一共有10個屬性,這10個屬性均為可選屬性,各屬性含義分別如下:

1、name  name屬性定義了被標註欄位在資料庫表中所對應欄位的名稱;

2、unique  unique屬性表示該欄位是否為唯一標識,預設為false。如果表中有一個欄位需要唯一標識,則既可以使用該標記,也可以使用@Table標記中的@UniqueConstraint。

3、nullable  nullable屬性表示該欄位是否可以為null值,預設為true。

4、insertable  insertable屬性表示在使用“INSERT”指令碼插入資料時,是否需要插入該欄位的值。

5、updatable  updatable屬性表示在使用“UPDATE”指令碼插入資料時,是否需要更新該欄位的值。insertable和updatable屬性一般多用於只讀的屬性,例如主鍵和外來鍵等。這些欄位的值通常是自動生成的。

6、columnDefinition  columnDefinition屬性表示建立表時,該欄位建立的SQL語句,一般用於通過Entity生成表定義時使用。(也就是說,如果DB中表已經建好,該屬性沒有必要使用。)

7、table  table屬性定義了包含當前欄位的表名。

8、length  length屬性表示欄位的長度,當欄位的型別為varchar時,該屬性才有效,預設為255個字元。

9、precision和10、scale

precision屬性和scale屬性表示精度,當欄位型別為double時,precision表示數值的總長度,scale表示小數點所佔的位數。

在使用此@Column標記時,需要注意以下幾個問題:

1、此標記可以標註在getter方法

2、此標記可以標註在屬性前

例如以下的兩種標註方法都是正確的:

1、標註在屬性前:

import javax.persistence.Column;  import javax.persistence.Entity;  import javax.persistence.Table;  @Entity  @Table(name = "contact")  public class ContactEO {  @Column(name = " contact_name ")  private String name;  public String getName() {  return name;  }  public void setName(String name) {  this.name = name;  }  }

2、標註在getter方法前:

import javax.persistence.Column;  import javax.persistence.Entity;  import javax.persistence.Table;  @Entity  @Table(name = "contact")  public class ContactEO {  private String name;  @Column(name = " contact_name ")  public String getName() {  return name;  }  public void setName(String name) {  this.name = name;  }  }

提示:JPA規範中並沒有明確指定那種標註方法,只要兩種標註方式任選其一都可以。這根據個人的喜好來選擇,本人習慣使用第一種方法。

下面舉幾個小例子:

示例一:指定欄位“contact_name”的長度是“512”,並且值不能為null

private String name;

@Column(name="contact_name",nullable=false,length=512)

public String getName() {

         return name;

}

建立的SQL語句如下所示。

CREATE TABLE contact (

id integer not null,

contact_name varchar (512) not null,

primary key (id)

)

示例二:指定欄位“monthly_income”月收入的型別為double型,精度為12位,小數點位數為2位。

         private BigDecimal monthlyIncome;

         @Column(name="monthly_income",precision=12, scale=2)

         public BigDecimal getMonthlyIncome() {

                   return monthlyIncome;

         }

建立的SQL語句如下所示。

CREATE TABLE contact (

id integer not null,

monthly_income double(12,2),

primary key (id)

)

示例三:自定義生成CLOB型別欄位的SQL語句。

private String  name;

@Column(name=" contact_name ",columnDefinition="clob not null")

public String getName() {

                  return name;

}

生成表的定義SQL語句如下所示。

CREATE TABLE contact (

id integer not null,

contact_name clob (200) not null,

primary key (id)

)

其中,加粗的部分為columnDefinition屬性設定的值。若不指定該屬性,通常使用預設的型別建表,若此時需要自定義建表的型別時,可在該屬性中設定。

提示:通過Entity定義生成表,還是通過表配置Entity,這兩種ORM的策略。有關兩種方法的對映策略好壞,將在本書的章節中“JPA工具的使用”一章進行詳細的比較。

示例四:欄位值為只讀的,不允許插入和修改。通常用於主鍵和外來鍵。

         private Integer id;

         @Column(name="id",insertable=false,updatable=false)

         public Integer getId() {

                   return id;

         }

相關推薦

JPA的@Column()註解

就像@Table註解用來標識實體類與資料表的對應關係類似,@Column註解來標識實體類中屬性與資料表中欄位的對應關係。 該註解的定義如下: // // Source code recreat

SpringBoot jpa事務註解

@Transactional spring 事務註解 1.簡單開啟事務管理 @EnableTransactionManagement // 啟註解事務管理,等同於xml配置方式的 <tx:annotation-driven /> 2.事務註解詳解 預設遇到throw

Spring JPA註解Column屬性

fault efault htm lan oracle runt arch public cal 該註解的定義如下: @Target({METHOD, FIELD}) @Retention(RUNTIME) public @interface Column { String

JPA註解及示例

文章出處:https://blog.csdn.net/zhengchao1991/article/details/70236919 1、用例項介紹JPA 使用JPA,肯定是有ORM的意思在裡面,當然我們首先要定義一個實體類(要將 Java 類指定為 JPA 實體,請使用 @Entity 批註

JPA @Id 和 @GeneratedValue 註解

@Id:  @Id 標註用於宣告一個實體類的屬性對映為資料庫的主鍵列該屬性通常置於屬性宣告語句之前,可與宣告語句同行,也可寫在單獨行上。  @Id標註也可置於屬性的getter方法之前。 @GeneratedValue: @GeneratedValue 

Spring Data JPA中常用的註解

好吧!今天就來講下Spring Data JAP中的常用註解~~!先附上昨天的實體類程式碼!我們先看看類前面的兩個註解~!@Entity標識這個實體類是一個JPA實體,告訴JPA在程式執行的時候記得生成這個實體類所對應的表~!@Table(name = "自定義的表名")自定

shop++ JPA 註解

@NotEmpty:不能為“” 和不能為空集合。 @Column(nullable = false, updatable = false, unique = true) 表明這一列不能為空, 不能修改, 唯一的 @Lob 大儲存欄位 @NotNull(groups

(轉)@RequestParam @RequestBody @PathVariable 等參數綁定註解

erro 後綁定 false zip ons type() eba veh manager 引言: 接上一篇文章,對@RequestMapping進行地址映射講解之後,該篇主要講解request 數據到handler method 參數數據的綁定所用到的註解和什麽情形下使用

Spring中@Component註解,@Controller註解(網摘)

tin ava 代碼 autowired reat control type imp 訪問   在使用Spring的過程中,為了避免大量使用Bean註入的Xml配置文件,我們會采用Spring提供的自動掃描註入的方式, 只需要添加幾行自動註入的的配置,便可以完成Servic

@Qualifier註解

num fine ali factor BE comm alt nta expec @Qualifier註解意味著可以在被標註bean的字段上可以自動裝配。Qualifier註解可以用來取消Spring不能取消的bean應用。 下面的示例將會在Customer的person

springboot的註解

ica prope pan span 配置 作用 cat fix 文件中 配置類相關: @PropertySource(value = "classpath:test.properties") //我們都把配置文件寫到application.yml中。有時我們不願意把

Sping框架中的註解

例子 上下 troy getbean 用戶id 查找 oge 數據庫 配置 傳統的Spring做法是使用.xml文件來對bean進行註入或者是配置aop、事物,這麽做有兩個缺點:1、如果所有的內容都配置在.xml文件中,那麽.xml文件將會十分龐大;如果按需求分開.xml文

Spring MVC @RequestMapping註解(2)

並不是 value get ecif 使用 .com java代碼 處理方法 分開 @RequestMapping 參數說明   value:定義處理方法的請求的 URL 地址。(重點)   method:定義處理方法的 http method 類型,如 GET、POST

@GeneratedValue 註解

springboot中@GeneratedValue作用: (1)、@GeneratedValue註解存在的意義主要就是為一個實體生成一個唯一標識的主鍵、@GeneratedValue提供了主鍵的生成策略。 (2)、@GeneratedValue註解有兩個屬性,分別是strategy和g

@Table 註解

spring @Table註解  作用是 : 宣告此物件對映到資料庫的資料表,通過它可以為實體指定表(talbe) 常用的兩個屬性:  1、name 用來命名 當前實體類 對應的資料庫 表的名字  @Table(name = "tab_u

SwaggerAPI註解,以及註解常用引數配置

官網github地址:https://github.com/swagger-api/swagger-core/wiki/Annotations-1.5.X 註解 @Api: 作用在類上,用來標註該類具體實現內容。表示標識這個類是swagger的資源 。  引數:  1

Java 註解

一、什麼是註解 註解也叫元資料,例如我們常見的@Override和@Deprecated,註解是JDK1.5版本開始引入的一個特性,用於對程式碼進行說明,可以對包、類、介面、欄位、方法引數、區域性變數等進行註解 註解都預設繼承介面Annotation.jav

java元註解

java中元註解有四個: @Retention @Target @Document @Inherited;    @Retention:註解的保留位置                @Retention(RetentionPolicy.SOURCE)   //註解僅

Java——註解

Java註解同 classs 和 interface 一樣,註解也屬於一種型別。它是在 Java SE 5.0 版本中開始引入的概念。 註解的定義 通過 @interface 關鍵字進行定義。 public @interface TestAnnotation { } 這段程式碼就建立了一個名字為 Tes

Java註解

一、介紹 1 概念 註解(Annotation),也叫元資料。一種程式碼級別的說明。它是Java 5新增的技術。要區別註釋,註解是程式碼裡的一種特殊標記,可在編譯前、編譯後、執行時等不同的時期被讀取,並作出相應的處理。 2 原則 由於註解的程式碼是附屬資訊,它