一步步学习Hibernate框架(三):采用jpa实现一对多关联映射(一)
来源:互联网 发布:mysql 时间戳相减 编辑:程序博客网 时间:2024/05/16 12:22
JPA(Java Persistence API)是Sun官方提出的一种Java持久化规范。为Java开发人员提供了一种对象/关系映射工具,管理Java应用中的关系数据。JPA的总体思想和现有Hibernate、TopLink等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:
第一:ORM映射元数据
JPA支持XML和JDK 注释(也可译作注解)两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。
第二:Java持久化API
用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者可以从繁琐的JDBC和SQL代码中解脱出来。
第三:查询语言
t_group表:
第一:ORM映射元数据
JPA支持XML和JDK 注释(也可译作注解)两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。
第二:Java持久化API
用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者可以从繁琐的JDBC和SQL代码中解脱出来。
第三:查询语言
这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
现在就用第一种技术来实现一对多的映射,对应到mysql中。一对多的处理有两种处理方式,第一种是映射成第三张表,第二种是映射成主外键关系。
需要引用的jar包除了hibernate的jar包,还有:
第一种:以一的主键作为多的外键
Group.java
package com.tgb.zhudan;import java.util.List;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.ManyToOne;import javax.persistence.OneToMany;import javax.persistence.Table;@Entity@Table(name="t_group")public class Group {private int id;private String name;private List<User> user;@Id@GeneratedValuepublic int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}/*@OneToMany*/@OneToMany(cascade = CascadeType.ALL, mappedBy = "id")//指向多的那方的pojo的关联外键字段 public List<User> getUser() {return user;}public void setUser(List<User> user) {this.user = user;}}
User.java
package com.tgb.zhudan;import java.util.List;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.ManyToOne;import javax.persistence.OneToMany;import javax.persistence.Table;@Entity@Table(name="t_group")public class Group {private int id;private String name;private List<User> user;@Id@GeneratedValuepublic int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}/*@OneToMany*/@OneToMany(cascade = CascadeType.ALL, mappedBy = "id")//指向多的那方的pojo的关联外键字段 public List<User> getUser() {return user;}public void setUser(List<User> user) {this.user = user;}}hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_jpa_one2many</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">123456</property><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><property name="hibernate.show_sql">true</property><mapping class="com.tgb.zhudan.Group"/><mapping class="com.tgb.zhudan.User"/></session-factory></hibernate-configuration>ExportDB:
package com.tgb.zhudan;import org.hibernate.cfg.AnnotationConfiguration;import org.hibernate.cfg.Configuration;import org.hibernate.tool.hbm2ddl.SchemaExport;/** * 将hbm生成ddl * @author Administrator * */public class ExportDB {public static void main(String[] args) {//默认读取hibernate.cfg.xml文件Configuration cfg = new AnnotationConfiguration().configure();SchemaExport export = new SchemaExport(cfg);export.create(true, true);}}生成的数据库表如下:
t_group表:
t_user表:
总结:从上面的两张数据表可以看到一端(t_group)的id作为了外键存在了多端(t_user),生成一个叫group_id的字段作为一端(t_group)的在多端(t_user)的外键。
如果我想让这种一对多关系的实体在数据库中的体现是第三种表而不是外键关系,那么我又应该怎么写jpa注解呢?下篇博客我们再说。
0 0
- 一步步学习Hibernate框架(三):采用jpa实现一对多关联映射(一)
- 一步步学习Hibernate框架(四):采用jpa实现一对多关联映射(二)
- 【Hibernate框架】关联映射(一对多,多对一)
- hibernate annotation (注解映射) 一对多 采用表关联
- Hibernate 关联映射 之 一对多单项关联 (一)
- Hibernate关联关系映射(一对多/多对一)
- hibernate 关联映射 双向多对一(一对多)
- Hibernate一对多及多对一关联映射(三)
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- 【SSH之旅】一步步学习Hibernate框架(二):一对一关联映射中的主键关联
- Hibernate(六)实现一对多、多对一映射关联关系
- Hibernate学习-7-关联映射(一对多,多对一)
- Hibernate关联映射-----一对多关联和多对一关联(续)
- Hibernate关联关系映射(单向一对多、单向多对一、双向一对多)
- Android实例-拨打电话
- Maven使用心得
- X-Forwarded-For
- excel打开csv 出现乱码怎么解决
- 完全升级OTA包的制作流程(下)
- 一步步学习Hibernate框架(三):采用jpa实现一对多关联映射(一)
- GreenPlum的并行查询优化策略
- easyUI中tree的动态reload
- opencv 3.0 Mat 数据类型转换
- ptmalloc,tcmalloc和jemalloc内存分配策略研究
- 我的安卓博客
- shiro学习和使用实例(1)
- Android RadioGroup做tab页卡切换时 内部RadioButton错位
- iOS UITableViewCell重用问题