SSH——hibernate 利用注解实现实体关联映射详解
来源:互联网 发布:java写爬虫很复杂吗 编辑:程序博客网 时间:2024/06/06 18:40
原文:http://blog.csdn.net/daybreak1209/article/details/49447879
一、JPA:
JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中实现数据持久化。同时,它还是JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构。而hibernate 从3.2开始,就开始兼容JPA,也就是说,除了通过配置xml实现实体关系映射,创建数据库表结构,还有一种更简易的办法,那就是使用注解。
二、搭建hibernate annotation 环境:
搭建利用注解进行实体映射的环境,就是在普通hibernate应用中,多引入有关annotation的jar包即可。所以首先还是引入jar,然后配置hibernate.cfg,xml文件,将使用注解的实体路径通过<mapping class=””>配至到xml文件中。具体jar包如下:
* HIBERNATE_HOME/lib/*.jar --hibernate home lib下所有jar包
* HIBERNATE_HOME/hibernate3.jar --hibernate核心jar
* 加入数据库驱动(MySQL驱动)
* hibernate-annotations.jar --3个hibernate annotation支持包
* ejb3-persistence.jar
* hibernate-commons-annotations.jar
三、实体关联关系通过注解的实现:
1、1:n hibernate JPA一对多关联映射
- @Entity //该实体利用注解进行映射
- @Table(name="t_student") //指定实体对应的数据库名称
- public class Student {
- private int id;
- private Classes classes;
- @Id //get方法指定主键
- @GeneratedValue //相当于@GeneratedValue(strategy=GenerationType.AUTO)id生成策略相当于hibernate中的native
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- @ManyToOne //多的一端加入关联关键 ,
- @JoinColumn(name="classesid")
- public Classes getClasses() {
- return classes;
- }
- public void setClasses(Classes classes) {
- this.classes = classes;
- }
- }
- //1端:
- @Entity
- @Table(name="t_classes")
- public class Classes {
- private int id;
- private Set students;
- @Id @GeneratedValue
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- //mappedBy在哪一端,哪一端就不维护关系,它成为了关系的被管理端
- //向当于hibernate中的inverse=true
- //如果采用了泛型,可以不用采用targetEntity属性
- @OneToMany(mappedBy="classes",targetEntity=Student.class)
- @JoinColumn(name="classesid") //关联外键的名称==students 端外键名方可进行关联
- public Set getStudents() {
- return students;
- }
- public void setStudents(Set students) {
- this.students = students;
- }
- @Entity
- @Table(name="t_user")
- public class User {
- private int id;
- private Group group;
- @Id
- @GeneratedValue
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- @ManyToOne //多的一端采用manytoOne ,<span style="font-family:微软雅黑;">JPA会采用关联对象+"_" + "id"方式作为字段加入表中,故会在t_student表加入group_id负责关联</span>
- public Group getGroup() {
- return group;
- }
- public void setGroup(Group group) {
- this.group = group;
- }
- }
- @Entity
- @Table(name="t_group")
- public class Group {
- private int id;
- @Id
- @GeneratedValue
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- }
3、n:n hibernate jpa 多对多关联映射
- @Entity
- @Table(name="t_user")
- public class User {
- private int id;
- private Set<Role> roles;
- @Id @GeneratedValue
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- //因为集合使用泛型所以不再使用targetEntity来指定类型
- @ManyToMany
- @JoinTable( //采用@JoinTable指定第三方表的名称
- name="t_user_role",
- joinColumns={@JoinColumn(name="user_id")},
- inverseJoinColumns={@JoinColumn(name="role_id")}
- )
- public Set<Role> getRoles() {
- return roles;
- }
- public void setRoles(Set<Role> roles) {
- this.roles = roles;
- }
- }
- @Entity
- @Table(name="t_role")
- public class Role {
- private int id;
- private Set<User> users;
- @Id @GeneratedValue
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- @ManyToMany(mappedBy="roles") //mappedBy通过对方(User对象)来管理关联关系
- public Set<User> getUsers() {
- return users;
- }
- public void setUsers(Set<User> users) {
- this.users = users;
- }
- }
1、单表继承——子类生成两张表,利用鉴别字段 鉴别子类
- @Entity
- @Table(name="t_animal")
- @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
- @DiscriminatorColumn(name="type",discriminatorType=DiscriminatorType.STRING)
- public class Animal {
- private int id;
- private String name;
- private boolean sex;
- @Id
- @GeneratedValue
- public int getId() {
- return id;
- }
- //省略get set 方法
- }
- @Entity
- @DiscriminatorValue(value="B")
- public class Bird extends Animal {
- private int height;
- //省略get set 方法
- }
- @Entity
- @DiscriminatorValue(value="P")
- public class Pig extends Animal {
- private int weight;
- //省略get set 方法
- }
2、具体表继承:共生成三张表,animal为公用属性表,bird 和pig 表存储各自特殊属性。
- @Entity
- @Table(name="t_animal")
- @Inheritance(strategy=InheritanceType.JOINED)
- public class Animal {
- private int id;
- private String name;
- private boolean sex;
- @Id
- @GeneratedValue
- public int getId() {
- return id;
- }
- //省略get set
- }
- @Entity
- public class Bird extends Animal {
- private int height;
- //省略get set
- }
- @Entity
- public class Pig extends Animal {
- private int weight;
- //省略get set
- }
3、类表继承:两张子类表,存储各自所有属性字段
- @Entity
- @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
- public class Animal {
- private int id;
- private String name;
- private boolean sex;
- @Id
- public int getId() {
- return id;
- }
- //省略get set
- }
- @Entity
- public class Bird extends Animal {
- private int height;
- }
- @Entity
- public class Pig extends Animal {
- private int weight;
- //省略get set
- }
通过使用注解,取代了每个实体配置xml,使用标签创建关联,很大程度上减少了编码的数量,使得配置实体映射方便简洁,同时,注解的使用不仅体现在实体映射的创建,同时还体现在junit测试、SSH框架的整合,在项目的各个地方均可使用注解达到简化代码的作用,符合标准所以处处适用,简单易集成。
- SSH——hibernate 利用注解实现实体关联映射详解
- SSH——hibernate 利用注解实现实体关联映射详解
- SSH——Hibernate实体关联映射总结(一)
- 【Hibernate — 映射实体关联关系】
- hibernate注解版关联映射 详解
- hibernate注解版关联映射 详解
- SSH关联映射注解
- hibernate中实体关联的注解写法(组件映射)
- 【SSH】Hibernate:O/R实体映射与一对一关联
- Hibernate高级实体关联映射之多值的实体关联(实体类实现三重关联)
- hibernate关联映射注解
- 【SSH】Hibernate关联映射
- 【SSH】——Hibernate(3)实体映射
- Hibernate高级实体关联映射之多值的实体关联(map实现三重关联,单向导航)
- Hibernate 实体关联关系映射
- SSH之hibernate—1和n的关联映射
- SSH之hibernate—1:1的关联映射
- Hibernate高级实体关联映射之多值的实体关联(一对多关联,利用联结表,set例)
- java基础--5.集合-2.集合
- PulltorefreshViewDemo
- Maven搭建SpringMVC+Hibernate
- 窗口自动关闭
- webpack2.0
- SSH——hibernate 利用注解实现实体关联映射详解
- IOS端K线系列之分时图-十字叉效果制作
- 2017逐浪字库最新出品——五大新作
- Tarjan 算法超级详解
- ArrayList的用法
- KMP算法
- 什么是构造和析构方法?功能是?
- 国内某著名IT公司编程测验: 以数组内的三个下标四等分一个数组
- [51nod 1851]俄罗斯方块