Hibernate–4
JPA(Java Persistence API):Java持久化API,用于规范ORM接口的一系列规范。
Hibernate中实现了JPA规范
配置
项目引入jpa配置(persistence.xml)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<!--
name : 用于指定持久化单元的名称(可以为空,必须配)
transaction-type : 指定事务类型,取值为JTA(默认)、RESOURCE_LOCAL
-->
<persistence-unit name="Unit1" transaction-type="RESOURCE_LOCAL">
<!--javax.persistence.PersistenceProvider的一个实现类,用于创建EntityManagerFactory(用于产生实体类管理者工厂)-->
<!--在Hibernate中实现了JPA规范,这个类其实也是默认的,可以不配-->
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider><!--罗列出需要持久化的类(在JavaEE环境下可以不配)--> <class>com.lee.cfgtest.Student</class> <class>com.lee.cfgtest.Teacher</class> <class>com.lee.one2many.Tenant</class> <class>com.lee.one2many.Landlord</class> <!--JPA实现者专有配置,不同的JPA规范实现框架,可能配置的property值不一样--> <!--参考hibernate.cfg.xml中的配置--> <properties> <!--DDL生成策略--> <!--其中update表示:检测实体类和表结构是否一致,如果不一致,更新表结构达到一致,如果不存在该表,就创建一张表--> <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/hibernate2"/> <property name="hibernate.connection.username" value="root"/> <property name="hibernate.connection.password" value="123"/> <!--第二部分 :配置数据库连接池:c3p0 (自由选择)--> <property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/> <!--配置数据库方言--> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL55Dialect"/> <!--是否在控制台显示生成的sql语句--> <property name="hibernate.show_sql" value="true"/> <!--是否将控制台里的sql语句格式化输出--> <!--<property name="hibernate.format_sql" value="true"/>--> </properties> </persistence-unit>一对多关系配置
1 | * 实体类中的配置(包含表之间一对多映射配置) |
注意:属性级别的注解,都是放在其对应的getter前。
一对多中”多”的一方的实体类配置
1 |
|
多对多关系配置
多对多配置以后会生成一个中间表,中间表维护了两个表之间的关系.但是在配置的时候,要分清楚关系维护端(保留关联关系),任何两个表之间都有主从之分
主表:hb_teacher对应的实体表
1 | // 指定这是一个实体类.在创建EntityManagerFactory的时候就会读取映射配置 |
从表:hb_student表对应的实:
1 |
|
在执行删除操作时:
主控方(维护了关联关系的表):
- 可以同时将记录删除,并且删除中间表中的记录
从方(放弃维护关联关系的表):
- 如果该记录被中间表引用,不能删除
在从方配置了级联删除,会将该记录删除,中间表中的数据也会删除,但,同时会将主控方的表中也删除一条记录,这是不允许的