Hibernate入门(3):属性映射 & 主键映射
来源:互联网 发布:excel密码破解软件 编辑:程序博客网 时间:2024/06/08 15:27
属性映射
1)@Column 修饰属性
使用 @Column 修饰POJO属性,可以同时指定一些映射信息,常用的信息如下(这些@Column属性都是可选的):
1
2
name="users") (
3
public class Users {
4
5
strategy= GenerationType.IDENTITY) (
6
name="user_id") (
7
private int id;
8
9
name="user_name",length="30") (
10
private String name;
11
....
12
}
2)@Transient 修饰非持久化属性
可以使用@Transient 修饰不参与持久化映射的属性,作为该PO的附加信息属性,被修饰的属性不会与数据表的字段有映射关系;
1
2
name="users") (
3
public class Users {
4
5
strategy= GenerationType.IDENTITY) (
6
name="user_id") (
7
private int id;
8
9
....
10
11
private String description;
12
}
3)@Enumerated 修饰枚举类型属性
在某些情况下,持久化类的属性是一个枚举类型,即该属性只能接受几个固定的值,这种情况下可以使用 @Enumerated 来修饰;
@Enumerated 有2种储存枚举到数据库的方式,EnumType.ORDINAL 序数储存,EnumType. STRING 字符串储存;
如以下定义一个枚举类:
1
2
name="users") (
3
public class Users {
4
5
strategy= GenerationType.IDENTITY) (
6
name="user_id") (
7
private int id;
8
9
....
10
EnumType.ORDINAL) //使用序号储存枚举值 (
11
name="sex") (
12
private Sex sex;
13
}
14
public enum Sex{
15
MALE,FEMALE
16
}
1
2
name="users") (
3
public class Users {
4
5
strategy= GenerationType.IDENTITY) (
6
name="user_id") (
7
private int id;
8
9
....
10
EnumType.ORDINAL) //使用序号储存枚举值 (
11
name="sex") (
12
private Sex sex;
13
}
4)@Lob,@Basic 修饰大数据类型的属性
数据库在保存图片、大段文字时,通常是使用Blob,Clob类型来保存,对应的 JDBC 类型为 java.sql.Blob ,java.sql.Clob,此时可以使用@Lob来修饰这种大数据类型;
当持久化类的属性为 byte[]、Byte[]、java.io.Serializable 类型时,@Lob 修饰属性映射为底层的 Blob 列;
当持久化类的属性为 char[]、Character[]、Java.io.String 类型时,@Lob 修饰属性映射为底层的 Clob 列;
1
//User.java
2
3
name="users") (
4
public class Users {
5
6
strategy= GenerationType.IDENTITY) (
7
name="user_id") (
8
private int id;
9
....
10
11
name="headshot") (
12
private byte[] headshot;
13
}
如以下示例保存一张图片的过程
1
public class UserManager {
2
public static void main(String[] args){
3
StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
4
.configure("hibernate.cfg.xml")
5
.build();
6
try{
7
SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
8
Session session = sessionFactory.openSession();
9
Transaction tran = session.beginTransaction();
10
11
12
Users user = new Users();
13
user.setName("Al-assad");
14
15
//读取本地中的一个图像文件,保存到实体
16
File file = new File("headshot.png");
17
byte[] content = new byte[(int)file.length()];
18
new FileInputStream(file).read(content);
19
user.setHeadShot(content);
20
21
session.save(user);
22
tran.commit();
23
24
session.close();
25
sessionFactory.close();
26
27
}catch(Exception ex){
28
StandardServiceRegistryBuilder.destroy(registry);
29
}
30
}
31
}
32
5)@Temporal 修饰日期类型的属性
@Temporal 用于修饰日期类型的属性,将Java中的 Java.util.Date,Java.util.Calendar类属性映射为数据库中的 date、time、timestamp类型数据列;
其所在的 value 属性包含3个值:Temporal.DATE(date日期类型),Temporal.TIME(time时间类型),Temporal.TIMESTAMP(时间戳类型) ;
1
2
name="users") (
3
4
public class Users {
5
6
7
strategy= GenerationType.IDENTITY) (
8
name="user_id") (
9
private int id;
10
11
...
12
13
name="create_date") (
14
TemporalType.DATE) (
15
private Date createDate;
16
17
...
18
}
主键映射
在现代数据库建模理论中,建议不使用具有实际意义的物理主键,而使用没有实际意义的逻辑主键。已减少数据库维护的复杂度,Hibernate提供了大量的逻辑主键构造器;
如果实体类的标识属性是基本类型、基本类型的包装类,String,Date等,可以简单使用 @Id 进行修饰;
如果希望 Hibernate 自动生成主键值,则还需要 @GeneratedValue 来修饰标识属性,该标识具有的属性如下(这些属性都是可选的):
示例如下:
1
2
name="users") (
3
4
public class Users {
5
6
7
strategy= GenerationType.IDENTITY) (
8
name="user_id") (
9
private int id;
10
11
....
12
}
除了 AUTO,INDETITY,SEQUENCE,TABLE 这4种 JPA 标准的主键生成策略,Hibernate还包含其他的主键生成策略,这些主键生成策略使用 @GenericGenerator 标注;
该标注包含name ,strategy 2个必须属性,strategy属性常用的可选值如下:
使用示例如下:
1
2
name="users") (
3
4
public class Users {
5
6
7
name="fk_hilo",strategy="hilo") (
8
generator="fk_hilo") (
9
name="user_id") (
10
private int id;
11
12
....
13
}
阅读全文
0 0
- Hibernate入门(3):属性映射 & 主键映射
- Hibernate映射主键属性
- hibernate注解--映射主键属性
- 2 Hibernate映射 属性 主键 集合 组件 联合主键
- Hibernate(十一)hibernate复合主键映射
- hibernate无主键映射
- hibernate映射主键 id
- hibernate复合主键映射
- Hibernate复合主键映射
- Hibernate复合主键映射
- Hibernate映射联合主键
- Hibernate联合主键映射
- hibernate映射联合主键
- Hibernate复合主键映射
- hibernate主键映射
- Hibernate复合主键映射
- Hibernate主键映射
- Hibernate复合主键映射
- 为什么微信能超越QQ?
- 快速排序(code)
- React Native带你实现scrollable-tab-view(五)
- 自然语言处理扫盲·第二天——白话机器翻译原理
- Android开发 之 OpenGL ES系列(4--添加颜色)
- Hibernate入门(3):属性映射 & 主键映射
- e的科学计数法
- Android EventLog
- doxygen生成PDF文档
- POJ 2299 Ultra-QuickSort (树状数组+离散化)
- 2017 Multi-University Training Contest
- Perl Win32::Gui 模块学习 (1)---- 主窗口的创建
- HDOJ HDU 1042 N!
- ASP.NET(C#) VS2010连接Oracle数据库