为什么80%的码农都做不了架构师?>>>   

就像@Table注解用来标识实体类与数据表的对应关系类似,@Column注解来标识实体类中属性与数据表中字段的对应关系。

该注解的定义如下:

@Target({METHOD, FIELD}) @Retention(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个属性均为可选属性,各属性含义分别如下:

name
name属性定义了被标注字段在数据库表中所对应字段的名称;

unique
unique属性表示该字段是否为唯一标识,默认为false。如果表中有一个字段需要唯一标识,则既可以使用该标记,也可以使用@Table标记中的@UniqueConstraint。

nullable
nullable属性表示该字段是否可以为null值,默认为true。

insertable
insertable属性表示在使用“INSERT”脚本插入数据时,是否需要插入该字段的值。

updatable
updatable属性表示在使用“UPDATE”脚本插入数据时,是否需要更新该字段的值。insertable和updatable属性一般多用于只读的属性,例如主键和外键等。这些字段的值通常是自动生成的。

columnDefinition
columnDefinition属性表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义时使用。(也就是说,如果DB中表已经建好,该属性没有必要使用。)

table
table属性定义了包含当前字段的表名。

length
length属性表示字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符。

precision和scale
precision属性和scale属性表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数。

API文档地址:http://docs.oracle.com/javaee/5/api/javax/persistence/Column.html

在使用此@Column标记时,需要注意以下几个问题:

此标记可以标注在getter方法或属性前,例如以下的两种标注方法都是正确的:

标注在属性前:

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

标注在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策略。

示例四:字段值为只读的,不允许插入和修改。通常用于主键和外键。

private Integer id;

@Column(name="id",insertable=false,updatable=false)
public Integer getId() {
return id;
}

转载于:https://my.oschina.net/liting/blog/525287

JPA的Column注解总结相关推荐

  1. Spring Boot集成JPA的Column注解命名字段无效的问题

    偶然发现,Spring Boot集成jpa编写实体类的时候,默认使用的命名策略是下划线分隔的字段命名. Spring Boot版本:1.5.4.release 数据表: id int, userNam ...

  2. JPA Column注解

    知识点: @Column注解一共有10个属性,这10个属性均为可选属性,各属性含义分别如下: name  name属性定义了被标注字段在数据库表中所对应字段的名称: unique  unique属性表 ...

  3. java jpa注解哪个包好,Spring Data JPA 中常用注解详解

    一.java对象与数据库字段转化 @Entity:标识实体类是JPA实体,告诉JPA在程序运行时生成实体类对应表 @Table:设置实体类在数据库所对应的表名 @Id:标识类里所在变量为主键 @Gen ...

  4. @Column注解及属性详解

    @Column注解 用来标识实体类中属性与数据表中字段的对应关系 (1)源码: /** Copyright (c) 2008, 2009, 2011 Oracle, Inc. All rights r ...

  5. 利用Eclipse的JPA自动生成注解实体

    新公司用的SSH(springmvc)框架,看代码的时候,发现没有hbm.xml文件,全部使用的注解形式.在一次闲聊的时候问同事,这么多entity  写起来不麻烦么.同事说根据数据库自动生成的.于是 ...

  6. JPA之@GeneratedValue注解

    JPA的@GeneratedValue注解,在JPA中,@GeneratedValue注解存在的意义主要就是为一个实体生成一个唯一标识的主键(JPA要求每一个实体Entity,必须有且只有一个主键), ...

  7. @column注解_Java 注解及其在 Android 中的应用

    Linux编程点击右侧关注,免费入门到精通! 作者丨WngShhnghttps://juejin.im/post/5b824b8751882542f105447d 一般的,注解在 Android 中有 ...

  8. @Column注解解析

    功能:@Column注解用来标识实体类中属性与数据表中字段的对应关系 语法: @Column(columnDefinition = "bigint(18) comment '公司ID'&qu ...

  9. @Column注解属性详解

    目录 导读 是什么? 步骤 总结 导读 Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制.Java 语言中的类.方法.变量.参数和包等都可以被标注.和 ...

最新文章

  1. 【RAC】RAC 实现IP访问控制
  2. Exchange 2010 EMC 删除 DisconnectedMailbox
  3. Logstash 使用http output处理数据
  4. 稚晖君又整活啦!基于全志F1C200s的超迷你
  5. 广域存储和计算协同面临哪些挑战,具有哪些优势?
  6. 列表元素循环移位中Python切片的妙用
  7. composer 更新php位置,使用composer安装/更新PHP包
  8. Galaxy Fold上市时间推延 屏幕瑕疵是主因
  9. selenium测试框架快速搭建(ui自动化测试)
  10. USGS 官方批量下载软件bda 安装问题
  11. 网站SEO优化的关键词密度怎么布局才算合理
  12. 矩阵论代码实践之满秩分解
  13. SylixOS进化简史
  14. 《资管新规》深度解读
  15. 论文翻译-Clicks can be Cheating: Counterfactual Recommendation for Mitigating Clickbait Issue
  16. Tableau疫情可视化
  17. Ping通Tlenet不通,如何解决?
  18. 我与兄弟连结缘的故事
  19. ubuntu18.04系统安装WiFi适配器驱动
  20. vue 用A链接下载文件 视频

热门文章

  1. Python web 开发:部署一个3行代码的wsgi app
  2. 挑战 Intel 和英伟达,高通发布 Cloud AI 100 边缘推理芯片
  3. php循环方法实现先序、中序、后序遍历二叉树
  4. [BZOJ] 1911 [Apio2010]特别行动队
  5. BZOJ 1091([SCOI2003]分割多边形-分割直线)
  6. 解析Makefile文件的构建规则
  7. sizeof用法研究
  8. Linux学习之获取帮助
  9. CCSP-防火墙学习笔记第6章
  10. USBSpirit(USB精灵)更新到1.2.300.105