hibernate_jpa

来源:互联网 发布:ubuntu 搜狗 乱码 编辑:程序博客网 时间:2024/05/29 04:50
如果用hibernate的Annotation那移植性就不是很好了,但他的功能比JPA的要强大.

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

原创粉丝点击