三种方式:
持久化注解 目前开发主流方式
XML配置描述文件(XML deployment descriptor,可以让Hibernate的PO类与JPA实体类兼容,实际中很少用)
传统的XML映射文件(*.hbm.xml)
映射类
@Entity
@Table{
name
catalog
indexes
schema
uniqueConstraints
}
@Index
@Proxy
@DynamicInsert
@DynamicUpdate
@SelectBeforeUpdate
@PolymorphismType
@Where
@BatchSize
@OptimisticLocking
@Check
@Subselect
映射属性
@Column{
columnDefinition
insertable
length
name
nullable
precision
scale
table
unique
updatable
}
@Formula{
注意:1、value="(sql)"的英文括号不能少
2、如果需要在value属性中使用参数,则直接使用where cur.id = currencyID形式
eg.:@Formula("(select concat(nt.title,nt.content)"+"from news_inf nt where nt.id = id)")
}
@Generated{
当Hibernate执行一条insert(当@Generated的value为INSERT或ALWAYS时)
或update(当@Generated的value为ALWAYS时)时,Hibernate会立即执行一条
select语句来获取该数据列的值,并将该值赋给该持久化对象的该属性。
可以和触发器一起使用,生成某个属性的值。
}
@Transient{
修饰不想持久保存的属性,生成的sql中不会有这列的插入
}
@Enumerated{
修饰枚举类型的属性
当其value属性为EnumType.STRING时,底层数据库保存枚举值的名称;
当其value属性为EnumType.ORDINAL时,底层数据库保存枚举值的序号;
}
@Lob{
当持久化类的属性为byte[]、Byte[]或java.io.Serializable类型时,@Lob修饰的属性将映射为底层的
Blob列;
当、、、、、、、、char[]、Character[]或java.lang.String时,、、、、、、、、、、、、、、、、
Clob列。
}
@Basic在@Lob的基础上加了延迟加载,加载对象时,并不立即加载pic属性,而是加载一个“虚拟”代理。
@Basic{
fetch{
FetchType.EAGER 立即加载
FetchType.LAZY 延迟加载
}
optional 是否允许使用null值
}
@Temporal{
TemporalType.DATE
TemporalType.TIME
TemporalType.TIMESTAMP
}
映射主键
@GeneratedValue{
strategy{
GenerationType.AUTO(默认值)
GenerationType.IDENTITY
GenerationType.SEQUENCE(要与 @SequenceGenerator一起使用)
GenerationType.TABLE(要与@TableGenerator一起使用)
}
generator 指定@SequenceGenerator或@TableGenerator的名称
}
@SequenceGenerator{
name
allocationSize
catalog
schema
initialValue
sequenceName
}
@TableGenerator{
name
allocationSize
catalog
schema
initialValue
sequenceName
eg.:
@TableGenerator(name="newsGen" ,
table="NEWS_ID_GEN",pkColumnName="gen_key",
valueColumnName="gen_value",
pkColumnValue="news_id"
)
@GeneratedValue(strategy=GenerationType.TABLE ,
generator="newsGen")
}
Hibernate主键生成策略
使用@GenericGenerator来使用Hibernate提供的主键生成策略
@GenericGenerator{
name
strategy{
increment
identity
sequence
hilo
seqhilo
uuid
guid
native
assigned
select
foreign
}
}
映射集合属性
注意:要求持久化集合字段必须声明为接口,两个持久化对象不能共享同一个集合元素的引用。
映射集合属性
@ElementCollection{
fetch
targetClass
}
映射集合属性表
@CollectionTable{
name
catalog
schema
indexes
joinColumns
uniqueConstraints
}
@JoinColumn{
columnDefinition
name
insertable
updatable
nullable
table
unique
referencedColumnName
}
列
@Column
索引列
@OrderColumn
@MapKeyColumn
List集合属性
示例代码:
// 集合属性,保留该对象关联的学校
@ElementCollection(targetClass=String.class)
// 映射保存集合属性的表
@CollectionTable(name="school_inf",
joinColumns=@JoinColumn(name="person_id",nullable=false))
// 指定保存集合元素的列为 school_name
@Column(name="school_name")
// 映射集合元素索引的列
@OrderColumn(name="list_order")
private List<String> schools = new ArrayList<>();
数组几乎与List集合一样
Set集合属性
没有索引
示例代码:
@ElementCollection(targetClass=String.class)
// 映射保存集合属性的表
@CollectionTable(name="school_inf",
joinColumns=@JoinColumn(name="person_id",nullable=false))
// 指定保存集合元素的列为 school_name
@Column(name="school_name",
nullable=false)
private Set<String> schools = new HashSet<>();
Map集合属性
索引列用@MapKeyColumn映射
示例代码:
// 集合属性,保留该对象关联的成绩
@ElementCollection(targetClass=Float.class)
// 映射保存集合属性的表
@CollectionTable(name="score_inf",
joinColumns=@JoinColumn(name="person_id",nullable=false))
@MapKeyColumn(name="subject_name")
//指定Map key的类型为String
@MapKeyClass(String.class)
// 指定保存集合元素的列为 school_name
@Column(name="mark")
private Map<String , Float> score = new HashMap<>();
有序集合映射(SortedSet、SortedMap)
@SortNatural
@SortComparator
@OrderBy
示例代码:
// 有序集合属性
@ElementCollection(targetClass=String.class)
// 映射保存集合元素的表
@CollectionTable(name="training_inf",
joinColumns=@JoinColumn(name="person_id" , nullable=false))
// 定义保存集合元素的数据列
@Column(name="training_name" , nullable=false)
// 使用@SortNatural指定使用自然排序
@SortNatural
private SortedSet<String> trainings
= new TreeSet<>();
映射数据库对象
两种方式:1、在映射文件中显示声明create和drop命令
2、提供一个实现了org.hibernate.mapping.AuxiliaryDatabaseObject的类,这个类知道如何组织create和drop命令。
注:为让Hibernate根据<database-object../>创建数据表,要将Hibernate配置文件里的hbm2ddl.auto属性值改成create
1:<hibernate-mapping>
......
<database-object>
<create>create trigger tri ...</create>
<drop>create trigger tri</drop>
</database-object>
</hibernate-mapping>
2:<hibernate-mapping>
......
<database-object>
<definition class="MyTriggerDefinition"/>
</database-object>
</hibernate-mapping>
3、指定某些数据库对象仅在特定的方言中才可使用
3:<hibernate-mapping>
......
<database-object>
<create>create table test(t_name varchar(255));</create>
<drop></drop>
<dialect-scope name="org.hibernate.dialect.MySQL5Dialect" />
<dialect-scope name="org.hibernate.dialect.MySQL5InnoDBDialect" />
</database-object>
</hibernate-mapping>
SchemaExport工具--->根据映射文件来生成数据库对象(使用这个生成数据库对象时,无须将hbm2ddl.auto属性值改为create,使用update也行)
Configuration conf = new Configuration().configure();
//创建SchemaExport对象
SchemaExport se = new SchemaExport(conf);
//设置输出格式良好的SQL脚本
se.setFormat(true)
//设置保存SQL脚本的文件名
.setOutputFile("new.sql")
//输出SQL脚本,并执行
.create(true,true);
也可以直接使用java命令来解释、执行该工具类,命令格式如下:
java -cp hibernate_classpaths org.hibernate.tool.hbm2ddl.SchemaExport options mapping_files
组件属性
@Embeddable修饰组件类
组件类里可以加@parent
- hibernate映射文件
Hibernate的持久化类和关系数据库之间的映射通常是用一个XML文档来定义的.该文档通过一系列XML元素的配置,来将持久化类与数据库表之间建立起一一映射.这意味着映射文档是按照持久化类的定义来创建 ...
- Hibernate映射文件如何配置触发器
Hibernate映射文件之触发器生成(generated属性.database-object元素) (2013-02-27 12:28:49) 转载▼ 标签: it 分类: JAVA学习笔记 这里分 ...
- Spring集成Hibernate映射文件的4种方式
概要: 在Spring的applicationContext.xml中集成Hibernate映射文件,通常是在<sessionFactory>这个Bean实例中进行的,若配置的映射文件较少 ...
- hibernate映射的 关联关系:有 一对多关联关系,一对一关联关系,多对多关联关系,继承关系
hibernate环境配置:导包.... 单向n-1:单向 n-1 关联只需从 n 的一端可以访问 1 的一端 <many-to-one> 元素来映射组成关系: name: 设定待映射的持 ...
- Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长:
Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长: 通过Hibernate注解的方式映射oracel数据库的sequence主键生成器 ...
- oracle ORA-01747(系统保留关键字)user.table.column, table.column 或列说明无效 hibernate映射oracle保留关键字
1.查询系统关键 select * from v$reserved_words 确认你使用的是否为关键字: select * from v$reserved_words w where w.KEYWO ...
- Hibernate映射类型对照表
Hibernate映射类型对照表 java类型 Hibernate映射类型 SQL类型 java.math.BigDecimal big_decimal numeric byte[] binary ...
- 02.Hibernate映射基础
前言:Hibernate的核心功能是根据数据库到实体类的映射,自动从数据库绑定数据到实体类.使我们操作实体类(Java对象)就能对数据库进行增.删.查.改,而不用调用JDBC API使数据操作变得简单 ...
- hibernate Java 时间和日期类型的 Hibernate 映射
基础知识: 在 Java 中, 代表时间和日期的类型包含: java.util.Date 和 java.util.Calendar. 此外, 在 JDBC API 中还提供了 3 个扩展了 java. ...
- [转]Hibernate映射的基本操作
++YONG原创,转载请注明http://blog.csdn.net/qjyong/article/details/1829672 Hibernate映射主要是通过对象关系映射 ...
随机推荐
- JVM 的 工作原理,层次结构 以及 GC工作原理
JVM Java 虚拟机 Java 虚拟机(Java virtual machine,JVM)是运行 Java 程序必不可少的机制.JVM实现了Java语言最重要的特征:即平台无关性.原理:编译后的 ...
- hdoj 5461 Largest Point
Largest Point Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tot ...
- 手机变为电脑的摄像头,使像素高清起来-使用DroidCam
你是不是已经在嫌弃电脑自带的摄像头的渣渣像素呢? 今天给大家安利一个方法:将手机摄像头设置为电脑的摄像头,让像素高清起来,对于搞图像的同志们真是福音啊,尤其是做人脸识别的时候. 方法有很多种,我推荐我 ...
- xml基础小结
XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的“数据库” 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不能有空格,区分大小写.有且仅有一个根标签 ...
- GWT事件处理
package com.zly.client; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.event.do ...
- 安装windows7、windows8.1提示无法创建新的分区
有时候用原版系统镜像安装windows系统时,会提示“windows无法安装到这个磁盘.选中的磁盘采用GPT分区形式”,导致安装失败,下面就来讲解一下如何解决. 1.在系统提示无法安装的那一步,按住“ ...
- adb概览及协议參考
原文:https://github.com/android/platform_system_core/blob/master/adb/OVERVIEW.TXT) Implementation note ...
- Java中PreparedStatement和Statement的用法区别(转)
1. PreparedStatement接口继承Statement, PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象. 2.作为 ...
- iOS网络层架构设计分享
前言 前些天帮公司做了网络层的重构,当时就想做好了就分享给大家,后来接着做了新版本的需求,现在才有时间整理一下. 之前的网络层使用的是直接拖拽导入项目的方式导入了AF,然后还修改了大量的源码,时隔2年 ...
- Android开发之屏幕方向
一.处理屏幕方向变化的两种技术 1.锚定方法 2.调整大小和重新定位,这种方法一般是分别为横向和纵向两种模式各自定义用户界面xml界面文件,当方向变化时读取对应的界面配置文件即可. 二.检测屏幕方向改 ...