整合hibernate与JPA
来源:互联网 发布:nginx 403 权限 编辑:程序博客网 时间:2024/05/29 18:01
整合hibernate与JPA
import java.io.Serializable;import java.util.HashSet;import java.util.Set;import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.JoinTable;import javax.persistence.ManyToMany;import javax.persistence.Table;import org.hibernate.annotations.GenericGenerator;/** * 多对多的配置 * @author 帅哥 * */@Entity //指明当前是个实体类@Table(name="user") //对应数据库中的表名public class User implements Serializable{@Id //主键@Column(name="uid") //对应数据库的表中的字段名@GenericGenerator(name="mynative",strategy="native") //这个是hibernate中提供的外键生成策略。@GeneratedValue(generator="mynative")//generator中引入上面的name值private Integer uid;@Column(name="cname") //对应数据库的表中的字段名,名称相同时,也可以省略private String uname;//user没有放弃外键维护,所以需要配置中间表@ManyToMany(targetEntity=Role.class,cascade={CascadeType.PERSIST})//name中间表的名字,joinColumns和用户表做主外键关联//inverseJoinColumn 和角色表做主外键关联@JoinTable(name="user_role",joinColumns={@JoinColumn(name="uid",referencedColumnName="uid")},inverseJoinColumns={@JoinColumn(name="rid",referencedColumnName="rid")})private Set<Role> roles=new HashSet<>();public Integer getUid() {return uid;}public void setUid(Integer uid) {this.uid = uid;}public String getUname() {return uname;}public void setUname(String uname) {this.uname = uname;}public Set<Role> getRoles() {return roles;}public void setRoles(Set<Role> roles) {this.roles = roles;}}
import java.io.Serializable;import java.util.HashSet;import java.util.Set;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.ManyToMany;import javax.persistence.Table;import org.hibernate.annotations.GenericGenerator;@Entity //指明当前是个实体类@Table(name="role") //对应数据库中的表名public class Role implements Serializable{@Id //主键@Column(name="rid") //对应数据库的表中的字段名@GenericGenerator(name="mynative",strategy="native") //这个是hibernate中提供的外键生成策略。@GeneratedValue(generator="mynative")//generator中引入上面的name值private Integer rid;@Column(name="rname") //对应数据库的表中的字段名,名称相同时,也可以省略private String rname;//role放弃外键维护@ManyToMany(targetEntity=User.class,mappedBy="roles")private Set<User> users=new HashSet<>();public Integer getRid() {return rid;}public void setRid(Integer rid) {this.rid = rid;}public String getRname() {return rname;}public void setRname(String rname) {this.rname = rname;}public Set<User> getUsers() {return users;}public void setUsers(Set<User> users) {this.users = users;}}
<?xml version="1.0" encoding="UTF-8"?><persistence xmlns="http://java.sun.com/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"version="1.0"><!--Name属性用于定义持久化单元的名字 (name必选,空值也合法); transaction-type 指定事务类型(可选) 取值: JTA:默认值 RESOURCE_LOCAL --><persistence-unit name="myPersistUnit" transaction-type="RESOURCE_LOCAL"><!-- javax.persistence.PersistenceProvider接口的一个实现类 --><provider>org.hibernate.jpa.HibernatePersistenceProvider</provider><!-- 显式列出实体类,在Java SE 环境中应该显式列出.也可以省略 --><class>com.haha.domain.User</class><!--厂商专有属性(可选) 我们用的Hibernate,后面都是hibernate.cfg.xml中配置 --><properties><!-- 生成DDL的策略 --><property name="hibernate.hbm2ddl.auto" value="update" /><!-- 数据库的连接信息 --><property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /><property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/day04hibernate" /><property name="hibernate.connection.username" value="root" /><property name="hibernate.connection.password" value="root" /><!-- 指定方言 --><property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /><!-- 是否显示SQL语句 --><property name="hibernate.show_sql" value="true" /><!-- 是否格式化SQL语句 --><property name="hibernate.format_sql" value="true" /></properties></persistence-unit></persistence>(4)、编写一个工具类,用于获取JPA的操作数据库对象
import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;//JPA的工具类public class JpaUtils {private static EntityManagerFactory em;static{em=Persistence.createEntityManagerFactory("myPersistUnit");}public static EntityManager createEntityManager(){return em.createEntityManager();}}(5)、编写一个测试类
import org.junit.Test;import com.haha.domain.Role;import com.haha.domain.User;import com.haha.utils.JpaUtils;public class demo2 {/** * 级联保存 */@Testpublic void run1(){EntityManager manager = JpaUtils.createEntityManager();EntityTransaction tx = manager.getTransaction();//开启事务tx.begin();//增删改查操作User u1=new User();u1.setUname("哈哈");User u2=new User();u2.setUname("嘿嘿");Role r1=new Role();r1.setRname("歌手");Role r2=new Role();r2.setRname("ceo");Role r3=new Role();r3.setRname("演员");//级联保存,外键维护u1.getRoles().add(r1);u1.getRoles().add(r2);u2.getRoles().add(r3);u2.getRoles().add(r1);r1.getUsers().add(u1);r1.getUsers().add(u2);r2.getUsers().add(u1);r3.getUsers().add(u2);manager.persist(u1);manager.persist(u2);//提交事务tx.commit();}}
@Entity
作用:指定当前类是实体类。写上此注解用于在创建SessionFactory时,加载映射配置。
@Table
作用:指定实体类和表之间的对应关系。
属性:
name:指定数据库表的名称
@Id
作用:指定当前字段是主键。
@GeneratedValue
作用:指定主键的生成方式。JPA的主键生成方式详解见2.4小节的说明。
属性:
strategy :指定主键生成策略。JPA支持四种生成策略,具体介绍看2.4小节。
@Column
作用:指定实体类属性和数据库表之间的对应关系
属性:
name:指定数据库表的列名称。
unique:是否唯一
nullable:是否可以为空
inserttable:是否可以插入
updateable:是否可以更新
columnDefinition: 定义建表时创建此列的DDL
secondaryTable: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字
作用:建立一对多的关系映射
属性:
targetEntityClass:指定多的多方的类的字节码
mappedBy:指定从表实体类中引用主表对象的名称。
cascade:指定要使用的级联操作
fetch:指定是否采用延迟加载
orphanRemoval:是否使用孤儿删除
@ManyToOne
作用:建立多对一的关系
属性:
targetEntityClass:指定一的一方实体类字节码
cascade:指定要使用的级联操作
fetch:指定是否采用延迟加载
optional:关联是否可选。如果设置为false,则必须始终存在非空关系。
@JoinColumn
作用:用于定义主键字段和外键字段的对应关系。
属性:
name:指定外键字段的名称
referencedColumnName:指定引用主表的主键字段名称
unique:是否唯一。默认值不唯一
nullable:是否允许为空。默认值允许。
insertable:是否允许插入。默认值允许。
updatable:是否允许更新。默认值允许。
columnDefinition:列的定义信息。
@ManyToMany
作用:用于映射多对多关系
属性:
cascade:配置级联操作。
fetch:配置是否采用延迟加载。
targetEntity:配置目标的实体类。映射多对多的时候不用写。
@JoinTable
作用:针对中间表的配置
属性:
name:配置中间表的名称
joinColumns:中间表的外键字段关联当前实体类所对应表的主键字段
inverseJoinColumn:中间表的外键字段关联对方表的主键字段
- 整合hibernate与JPA
- spring 与JPA/Hibernate的整合示例
- spring mvc 与JPA/Hibernate的整合示例
- 传智播客jpa学习,jpa整合hibernate
- jpa与spring整合
- SPRING JPA 与 Hibernate JPA
- JPA与Hibernate
- Hibernate与JPA
- JPA与hibernate注解
- Hibernate 与 JPA 小记
- Hibernate注解与JPA
- jpa与hibernate
- Hibernate注解与JPA
- Hibernate与JPA
- Native Hibernate与Hibernate JPA
- Native Hibernate与Hibernate JPA
- Jpa之与Spring整合
- spring整合JPA(hibernate)以及jdbctemple
- git 生成patch并打入主干
- python索引问题
- Context应用
- tomcat 启动项目时出现 ZipException: error in opening zip file
- 为什么那么多人都选择通过培训来学习Java?
- 整合hibernate与JPA
- git error Large files detected解决办法
- Python web 框架 Flask 入门 macOS 下实践记录
- kafka学习(1)
- html定时刷新
- 今天
- 移位
- pagehelper
- mysql navicat 事件开启