JPA+Hibernate 3.3 ——基本属性映射
1、数据库中字段的数据类型为longtext
存放二进制文本的注解方式
private byte[] file;
//设置延迟初始化
@Lob @Basic(fetch=FetchType.LAZY)
public byte[] getFile() {
return file;
} public void setFile(byte[] file) {
this.file = file;
}
数据库中数据类型为longblob
设置该属性与字段没有映射关系的注解方式
private String Mail;
@Transient
public String getMail() {
return Mail;
} public void setMail(String mail) {
Mail = mail;
}
2、二进制文件格式类型
private byte[] file;
//设置延迟初始化
@Lob @Basic(fetch=FetchType.LAZY)
public byte[] getFile() {
return file;
} public void setFile(byte[] file) {
this.file = file;
}
3、设置字段属性的注解方式
private String userName;
@Column(length=20,nullable=false,name="name")
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
length表示字段的长度
nullable表示字段是否为空,false表示不能为空,true表示可以为空
name表示修改字段名称,默认情况下采用属性名称作为字段名称
通过@Column注解设置,包含的设置如下
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表示小数点所占的位数。
@Column(name = "user_code", nullable = false, length=32)//设置属性userCode对应的字段为user_code,长度为32,非空
private String userCode;
@Column(name = "user_wages", nullable = true, precision=12, scale=2)//设置属性wages对应的字段为user_wages,12位数字可保留两位小数,可以为空
private double wages;
@Temporal(TemporalType.DATE)//设置为时间类型
private Date joinDate;
4、设置数据类型为date的注解方式
private String birthday;
@Temporal(TemporalType.DATE)
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
TemporalType.DATE 其效果为1985-06-18
TemporalType.TIME 其效果为16:15:05
TemporalType.TIMESTAMP 其效果为1985-06-18 16:15:05
5、设置数据类型为枚举的方式
package com.hujuan.bean;
public enum Gender {
MEN,WOMEN
}
//设置默认值为MEN
private Gender gender = Gender.MEN; @Enumerated(EnumType.STRING)
@Column(length=5,nullable=false)
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
EnumType.STRING 存进数据库的为字符串即MEN或WOMEN
EnumType.ORDIAL 存进数据库的为索引即0或1
存放大文本的注解方式
private String info;
@Lob
public String getInfo() {
return info;
} public void setInfo(String info) {
this.info = info;
}
6、字段排序
在加载数据的时候可以为其指定顺序,使用@OrderBy注解实现
@Table(name = "USERS")
public class User {
@OrderBy(name = "group_name ASC, name DESC")
private List books = new ArrayList();
}
7、主键生成策略
一般是如下4种:
1. AUTO:自动自增生成
AUTO是默认的主键生成策略,使用了AUTO策略,JPA会根据不同的数据库类型来实现自增策略。比如MySql的表主键是自增1的,那么此策略就会按照数据库的自增1策略,每次插入数据库记录的时候都会自增1。Java代码片段如下:
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
2. TABLE:自定义表生成器
自定义表生成器是在数据库中再建立一张新的表,这张表不是业务表,而是一张特殊表,这张表是专门用来管理整个数据库的主键的具体值的。在数据库中建立一张表如下图所示:
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "myTablePK")
@TableGenerator(
name = "myTablePK",
table = "tb_pk",
pkColumnName = "table_PK_name",
pkColumnValue = "tb_contact_pk",
valueColumnName = "table_PK_value",
allocationSize = 1)
private Integer id;
下面对@TableGenerator标记的属性说明一下:
Name:引用@GeneratedValue里面的generator的值
Table:数据库中专门用于生成主键的特殊表的表名
pkColumnName:tb_pk表中哪个字段代表了被服务(需要生成主键表)的表名
valueColumnName:指定此辅助表的哪个字段存储了主键的具体值
pkColumnValue:指明一个主键名称,依靠这个名称可以在这张特殊表中找到唯一的table_PK_value的值,而这个值就是具体的主键值。换句话说,数据库有几个业务表,这张表就应该有几条记录才对(除去复合主键的情况)
allocationSize:代表自增数
3. Identity:像MS SQL支持Identity字段的生成主键策略
4. Sequence:像Oracle支持Sequence的生成主键策略
public class Users implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)//主键自增,注意,这种方式依赖于具体的数据库,如果数据库不支持自增主键,那么这个类型是没法用的
@Column(name = "user_id", nullable = false)
private int userId;
public class Users implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.TABLE)//通过一个表来实现主键id的自增,这种方式不依赖于具体的数据库,可以解决数据迁移的问题
@Column(name = "user_code", nullable = false)
private String userCode;
public class Users implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)//通过Sequence来实现表主键自增,这种方式依赖于数据库是否有SEQUENCE,如果没有就不能用
@SequenceGenerator(name="seq_user")
@Column(name = "user_id", nullable = false)
private int userId;
JPA+Hibernate 3.3 ——基本属性映射的更多相关文章
- Spring4.x Jpa + hibernate的配置(废弃JpaTemplate)
近年来 ORM(Object-Relational Mapping,对象关系映射,即实体对象和数据库表的映射)技术市场热闹非凡,各种各样的持久化框架应运而生,其中影响最大的是 Hibernate 和 ...
- JPA(六):映射关联关系------映射单向一对多的关联关系
映射单向一对多的关联关系 新建项目项目请参考<JPA(二):HellWord工程>,基于上一章讲解的<JPA(五):映射关联关系------映射单向多对一的关联关系>中的例子进 ...
- Spring Boot + Jpa(Hibernate) 架构基本配置
本文转载自:https://blog.csdn.net/javahighness/article/details/53055149 1.基于springboot-1.4.0.RELEASE版本测试 2 ...
- 7. JPA - Hibernate【从零开始学Spring Boot】
转载:http://blog.csdn.net/linxingliang/article/details/51636976 在说具体如何在spring boot 使用hibernate前,先抛装引玉些 ...
- 63.JPA/Hibernate/Spring Data概念【从零开始学Spring Boot】
[从零开始学习Spirng Boot-常见异常汇总] 事情的起源,无意当中在一个群里看到这么一句描述:"有人么?默默的问一句,现在开发用mybatis还是hibernate还是jpa&quo ...
- (7)JPA - Hibernate【从零开始学Spring Boot】
在说具体如何在spring boot 使用Hibernate前,先抛装引玉些知识点?什么是JPA呢? JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象- ...
- SpringBoot + Jpa(Hibernate) 架构基本配置
1.基于springboot-1.4.0.RELEASE版本测试 2.springBoot + Hibernate + Druid + Mysql + servlet(jsp) 一.maven的pom ...
- Spring boot之JPA/Hibernate/Spring Data
1.什么是JPA? JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. JPA(Java Per ...
- Spring Boot 2.x 之 Spring Data JPA, Hibernate 5
1. Spring Boot常用配置项 基于Spring Boot 2.0.6.RELEASE 1.1 配置属性类 spring.jpa前缀的相关配置项定义在JpaProperties类中, 1.2 ...
随机推荐
- BZOJ1053 [HAOI2007]反素数ant 数论
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 传送门 - BZOJ1053 题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正 ...
- 【Java】 剑指offer(21) 调整数组顺序使奇数位于偶数前面
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇 ...
- 附004.Docker Compose环境变量说明
一 环境变量概述 Compose支持在docker-compose执行命令的文件夹中,名为.env的环境变量配置文件声明默认环境变量. 二 定义变量 2.1 语法规则 Compose建议env文件中的 ...
- ReportNG报表显示中文乱码和TestNG显示中文乱码实力解决办法
最近在进军测试自动化框架学习阶段,但无意间总是会伴随小问题的困扰,比如中文乱码,而导致显示总是不舒服,个人觉得,就一定要解决,似乎有点点强迫症.所以遇到ReportNG报表显示中文乱码和TestNG显 ...
- CentOS 6.4在运行XFS时系统crash的bug分析
最近有一台CentOS 6.4的服务器发生多次crash,kernel version 是Linux 2.6.32-431.29.2.el6.x86_64.从vmcore-dmesg日志内容及cras ...
- Flag之2019年立
今天是2019年1月12日,这是我第一次在一个公众的平台上立flag. 至于为何想立一个flag,应该是因为自己年龄渐长,从儿时读书时代家人对自己的要求就不高,考试可以及格即可,导致了自己养成了比较安 ...
- IdentityServer4-主题
一.Startup 二.定义Resources 三.定义Clients 四.登录 五.使用外部身份提供商登录 六.Windows身份验证 七.登出 八.注销外部身份提供商 九.联合注销 十.联合网关 ...
- u3d 创建元件 预制件 U3d creates component prefabricated parts
u3d 创建元件 预制件 U3d creates component prefabricated parts 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@ ...
- docker 安装 nginx
docker pull nginx docker run -d -p 80:80 -v /opt/nginx/www/:/usr/share/nginx/html/ --name webserver ...
- Asp.Net JsonResult重写
在Json序列化工具中,Newtonsoft.Json 的工具包相对比较好用. 对于循环引用.序列化格式.时间格式等都提供了可配置. 如果想重写Mvc 自带 JsonResult 返回结果,提供了2中 ...