hibernate_jpa
来源:互联网 发布:ubuntu 搜狗 乱码 编辑:程序博客网 时间:2024/05/29 04:50
JPA:java持久化规范,hibernate对他进行了实现,如果用了标准注解,那这样就可以移植了,注解支持要专门下载.
应用jap的步骤:
1、建立java项目
2、创建User Library,加入依赖包
* HIBERNATE_HOME/lib/*.jar
* HIBERNATE_HOME/hibernate3.jar
* 加入数据库驱动(mysql驱动)
3、加入hibernate annotation支持包
* hibernate-annotations.jar
* ejb3-persistence.jar
* hibernate-commons-annotations.jar
4、提供hibernate.cfg.xml文件,完成基本的配置
5、建立实体类User.java
6、采用注解完成映射,此时就不用hbm映射文件了.
7、将实体类加入到hibernate.cfg.xml配置文件中,以前的是hbm文件.
8、编写工具类ExoprtDB.java,注解生成ddl,必须采用AnnotationConfiguration类
9、建立客户端类Client,添加用户数据到mysql
以下是各种映射:
1.hibernate jpa基本映射
了解常用注解:
@Entity
@Id,ID一定要配置的,其他一般的属性他默认是自动配上去的.
@Table
@GeneratedValue
@Transient
@Column
采用如下注解会默认采用数据库的主键生成能力,相当于hibernate中的native
@GeneratedValue相当于@GeneratedValue(strategy=GenerationType.AUTO)
@Entity相当于那个映射文件中的Class标签,注意用JPA的那一套.注解实际上功能没有XML配置的那种方式强大,他最主要的好处就是简单.
@Id主键注解可以放到属性上,可以到方法getId()上,区别:前者是直接对属性赋值,后者是通过方法,跟hbm中的配置中的一项,叫access相类似,建议放到方法上.
了解如何采用hibernate的uuid生成主键
2.hibernate JPA多对一关联映射
采用@ManyToOne来映射多对一
关于关联对象在表中的维护,JPA会采用关联对象+"_" + "id"方式作为字段加入表中,此即是那个外键.所以可以不用我们自己写.
user-group的多对一映射
@ManyToOne
public Group getGroup() {
return group;
}
3.hibernate JPA一对多关联映射
采用@OneToMany来映射
了解mappedBy属性:mappedBy在哪一端,哪一端就不维护关系,它成为了关系的被管理端,相当于hibernate中的inverse=true
了解targetEntity属性,如果用了范型可以不用这个属性,如果没有用的话,则加上此属性.
了解@JoinColumn注解
student<->classes
在多的一端面student中:
@ManyToOne
@JoinColumn(name="classesid")
public Classes getClasses() {
return classes;
}
在一的一端classes中:
//mappedBy在哪一端,哪一端就不维护关系,它成为了关系的被管理端
//向当于hibernate中的inverse=true
//如果采用了泛型,可以不用采用targetEntity属性
@OneToMany(mappedBy="classes",targetEntity=Student.class)
@JoinColumn(name="classesid")
public Set getStudents() {
return students;
}
4.hibernate jpa多对多关联映射
采用ManyToMany映射
采用@JoinTable指定第三方表的名称
User<->Role
User中:
//因为集合使用泛型所以不再使用targetEntity来指定类型
@ManyToMany
@JoinTable(
name="t_user_role",
joinColumns={@JoinColumn(name="user_id")},//本端的键
inverseJoinColumns={@JoinColumn(name="role_id")}//对端的键
)
public Set<Role> getRoles() {
return roles;
}
Role中:
@ManyToMany(mappedBy="roles")
public Set<User> getUsers() {
return users;
}
5.采用JPA映射每棵类继承树一张表Animal,Pig,Bird
@Entity
@Table(name="t_animal")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="type",discriminatorType=DiscriminatorType.STRING)
public class Animal {
......
}
@Entity
@DiscriminatorValue(value="P")
public class Pig extends Animal {}
@Entity
@DiscriminatorValue(value="B")
public class Bird extends Animal {}
6.采用JPA映射每个类一张表
@Entity
@Table(name="t_animal")
@Inheritance(strategy=InheritanceType.JOINED)
public class Animal {}
@Entity
public class Pig extends Animal {}
@Entity
public class Bird extends Animal {}
7.采用JPA映射每个具体类一张表,只需把Animail的那个策略换一下即可
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Animal {}
- hibernate_jpa
- Sql导入导出时候 无法在只读列中插入数据
- hive资料整理系列 六 hive 配置
- Anroid图片格式转换程序(winXP+cygwin+opencv+ndk)
- exescope使用
- Unity2.0学习笔记-Unity2.0基础-如何配置Unity2.0容器-设计时配置
- hibernate_jpa
- JavaScript处理简单鼠标事件
- .net中SessionState相关配置
- char/nchar、varchar/nvarchar、char/character区别
- 什么是Log4net
- jquery 拖动表格 改变列宽
- 集成Spring 2.5并整合JPA常见错误
- Unity2.0学习笔记-Unity概述
- 常用开源协议简介