JPA基本介绍以及使用
<?xml version="1.0"?>
<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">
<persistence-unit name="hsqldb-unit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
<property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
<property name="hibernate.connection.username" value="sa"/>
<property name="hibernate.connection.password" value=""/>
<property name="hibernate.connection.url" value="jdbc:hsqldb:hsql://localhost/test"/>
<property name="hibernate.max_fetch_depth" value="3"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.jdbc.fetch_size" value="18"/>
<property name="hibernate.jdbc.batch_size" value="10"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter" ref="hibernateJpaVendorAdaptor"/>
<property name="packagesToScan" value="xxx"/>
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
</property>
<property name="persistenceXmlLocation" value="/WEB-INF/config/persistence.xml"/>
</bean> <bean id="hibernateJpaVendorAdaptor" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="databasePlatform" value="org.hibernate.dialect.H2Dialect"/>
</bean> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
JPA的持久化映射的数据表
- GenerationType.TABLE:使用独立表来记录主键,适用于各种数据库,但性能会差一些,因其每次进行insert时都会额外发出一次主键查询;
- GenerationType.SEQUENCE:只适用于oracle数据库;
- GenerationType.IDENTITY:适用于Sqlserver等数据库;
- GenerationType.AUTO:由JPA实现来探测底层使用的数据库,自动采取一种主键自增的策略,可以指定生成器。如对Oracle采用SEQUENCE策略,对Sqlserver采用IDENTITY策略。AUTO策略支持目前绝大多数已知的数据库,这是默认的策略也是我们目前采用的策略。
- Clob:java.lang.String, java.lang.Character[],java.lang.char[], java.sql.Clob可映射为Clob;
- Blob:java.lang.byte[], java.lang.Byte[], java.sql.Blob及实现了Serializable对象的类可映射为Blob。
数据表之间的关联关系映射
@OneToOne
@Entity
public class Husband {
@Id
@GeneratedValue
private Long id; private String name; @OneToOne(mappedBy="husband", cascade=CascadeType.ALL)
private Wife wife; ...
}
@Entity
public class Wife {
@Id
private Long id; private String name; @OneToOne(cascade=CascadeType.ALL)
@PrimaryKeyJoinColumn
@MapsId
private Husband husband;
}
@Entity
public class Car {
@Id
@GeneratedValue
private Long id; private String name; @OneToOne(cascade={CascadeType.PERSIST, CascadeType.MERGE}, fetch=FetchType.LAZY) @JoinColumn(name="engine_id")//外键关联字段
private Engine engine; @Entity
public class Engine { @Id
@GeneratedValue
private Long id; private String name; @OneToOne(mappedBy="engine", fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.MERGE})
private Car car;
}
@OneToMany @ManyToOne
@OneToMany(mappedBy = "executableSubTaskDefinition", fetch = FetchType.LAZY)
private List<ExecutableSubTaskStatus> executableSubTaskStatusList = new ArrayList<>();
@ManyToOne(cascade = CascadeType.ALL, optional = false)
private ExecutableSubTaskDefinition executableSubTaskDefinition;
@ManyToMany
@ManyToMany
@JoinColumn(name = "task_data_range")
private List<SubTaskDefinition> subTaskDefinitions = new ArrayList<>();
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "sub_task_data_range", joinColumns = @JoinColumn(name = "sd_task_id", referencedColumnName = "sub_task_definition_id"),
inverseJoinColumns = @JoinColumn(name = "sd_data_id", referencedColumnName = "task_data_range_id"))
private List<TaskDataRange> taskDataRanges = new ArrayList<>();
JPA基本介绍以及使用的更多相关文章
- SQLite数据库和JPA简单介绍
SQLite数据库和JPA简单介绍 一.SQLite简单使用 SQLite是遵循ACID的关系数据库管理系统,它的处理速度很快,它的设计目标是嵌入式的,只需要几百K的内存就可以了. 1.下载SQLit ...
- Spring整合Hibernate实现Spring Data JPA (介绍和使用)
Spring Data JPA是Spring基于Hibernate开发的一个JPA框架.如果用过Hibernate或者MyBatis的话,就会知道对象关系映射(ORM)框架有多么方便. 但是Sprin ...
- JPA的介绍
一.JPA概述 1.JPA是什么? JPA:Java Persistence API:用于对象持久化的 API,JPA是Java EE 5.0 平台标准的 ORM 规范, 使得应用程序以统一的方式访问 ...
- springboot:spring data jpa介绍
转载自:https://www.cnblogs.com/ityouknow/p/5891443.html 在上篇文章springboot(二):web综合开发中简单介绍了一下spring data j ...
- spring boot(五)Spring data jpa介绍
在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 使用spr ...
- jpa介绍
1.jpa的介绍 JPA是Java Persistence API的简称, 中文名为Java持久层API; 是JDK 5.0注解或XML描述对象-关系表的映射关系, 并将运行期的实体对象持久化到数据库 ...
- spring boot(五):spring data jpa的使用
在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 使用spr ...
- spring data jpa入门学习
本文主要介绍下spring data jpa,主要聊聊为何要使用它进行开发以及它的基本使用.本文主要是入门介绍,并在最后会留下完整的demo供读者进行下载,从而了解并且开始使用spring data ...
- 从零一起学Spring Boot之LayIM项目长成记(四) Spring Boot JPA 深入了解
前言 本篇内容主要是一些关于JPA的常用的一些用法等.内容也是很多是看其他博客学来的,顺道在本系列博客里抽出一篇作为总结.下面让我们来看看吧. 不过我更推荐大家读本篇:https://lufficc. ...
随机推荐
- ES查询index对应的mapping信息
private void getMappingByIndex(String indices) throws IOException { GetMappingsRequest getMappingsRe ...
- The program environment for cypress cy8ckit-002
customer use cypress ic to make sure the wireless products, we are prepare to establish the environ ...
- CMD命令提示符下选中文字即可以复制和SecureCRT一样
用过 SecureCRT 的都会觉得复制粘贴很方便.只要选中相应文字,会自动复制.然后点鼠标右键就可以粘贴,非常方便. 但是在windows系统下的CMD里面,每次都要点鼠标右键→标记,再选中相应文字 ...
- JavaScript的数组
属性: length(长度) 方法: join(字符);//把数组用指定字符拼接成一个字符串. 例:str.join("-"); //a-b-c-d sort();//排序(自然排 ...
- EasyPusher安卓直播推流到EasyDarwin开源流媒体服务器工程简析
EasyPusher主要有三部分组件组成:采集,编码,叠加,上传.在这个基础上同时支持本地存储\后台预览的功能.主要业务模块与相关类之间的关系如图所示: Created with Raphaël 2. ...
- Swift UITextField各种属性的设置
//MARK: 文本输入框 func _initTextField() { //如果需要在模拟器中调用电脑的键盘 快捷键:command + shift + k let textField = UIT ...
- stark组件02
1.怎么在显示页面添加新字段(a标签)?在admin.py下注册就好了 当我们需要在admin页面添加新的a标签时,需要引入一个类似safe功能的模块 from django.utils.safest ...
- python的基础
一. print(1 or 1 > 4) # 1 (从左到右1为True就结束了) print(1 > 1 or 3) # 3print(3 > 1 or 3 or 3 > ...
- ssm+PageHelper实现分页查询
通过搭建ssm框架,然后通过mybatis的分页插件pagehelp进行分页查询.源码:https://gitee.com/smfx1314/pagehelper 看一下项目结构: 首先创建一个mav ...
- stm32寄存器版学习笔记06 输入捕获(ETR脉冲计数)
STM32外部脉冲ETR引脚:TIM1-->PA12;TIMER2-->PA0:TIMER3-->PD2;TIMER4-->PE0… 1.TIM2 PA0计数 配置步骤 ①开启 ...