一:JPA映射
@Entity -->把一个类映射成数据库表 ,默认值就是类名
@Entity(name="xxx") -->把一个类映射成数据库表 ,表名就是xxx
@Table(name="yyy")-->把一个类映射成数据库表 ,表名就是yyy
@Column(length=4,name="userName",nullable=false)-->
length-->表字段的长度是4,
name=-->表字段的列名是userName,
nullabl-->列不允许为空,等于true就是可以为空
@Id @GeneratedValue--> 主键并自动增长
@Temporal(TemporalType.TIMESTAMP)--> 设置时间格式
TIMESTAMP-->2010-10-10 10:10:10
DATE-->2010-10-10
TIME--> 10:10:10
@Enumerated(EnumType.ORDINAL)-->枚举类型
EnumType.ORDINAL -->表是用枚举的索引
EnumType.STRING -->表是用枚举的名字
@Lob-->长文本类型或(byte)字节类型
@Transient-->不映射成数据库的列名
@Basic(fetch=FetchType.LAZY)-->一般读取大的数据时使用
FetchType.LAZY--> 延迟加载,获取时必须在EntityManager打开或session.openSession()时,才可以用,不然会报错
FetchType.EAGER--> 立即加载
二: EntityManager method 讲解
EntityManager.find(class,Object) //相当hibernate get()
EntityManager.getReference(class,Object) //相当hibernate load()
//延迟加载,获取时必须在EntityManager打开或session.openSession()时,才可以用,不然会报LazyInitialException()
JPA四种状态
new-->新建 User user=new User("zhang");
managed-->脱管 EntityManager.getTransation().begin();打开,这时候处于脱管状态; 如果这时用user.setName("san") ;是可以更新到数据库里面的;
free-->游离 EntityManager.clear()后;这时处于游离状态,这时如果要更新要用 EntityManager.merge(Object)方法;
delte-->删除 EntityManager.remove()时;
三: JPQL
1.查询 (:name)位置符查询和(?1)命名参数查询
2.Query query=EntityManager.createQuery("select * from User");
query.getResultList(); //所有
3.Query query=EntityManager.createQuery("select count(*) from User");
query.getSingleResult(); //单个 相当hibernate 的session.createQuery().uniqueResult() 方法;
4.query.execute();query.executeUpdate();
四:一对多的双向关系维护
eg:
Order(订单)OrderItem(订单项)的关系
Order 就是关系被维护端
OrderItem 就是关系维护端,因为这边多,多得一方是关系维护端
Order set<OrderItem> set=new HashSet<OrderItem>();
OrderItem Order order;
Order(订单) @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="order")
//因为OrderItem是关系维护端, Order 就是关系被维护端 ,mappedBy指向那边,那边就是关系被维护端,
//Order需要OrderItem中的order来维护两边的关系,因为 Order中的每一项都是OrderItem,
//OrderItem 表示主键
//Order 中的orderItemId引用了OrderItem 的id
//mappedBy="order"相当与hibernate inverse=true
cascade -->级联
CascadeType.MERGE, -->当对象处于游离状态时,调用EntityManager.merge()时才有用;如下全都一样,但是状态不一样
CascadeType.PERSIST,
CascadeType.REFRESH,
CascadeType.REMOVE ,
CascadeType.ALL 时,表是所有状态
mappedBy 表示谁是关系的被维护端,
oneToMany //To后面的单词是many表示延迟加载,反之是 FetchType.EAGER--> 立即加载
fetch=FetchType.LAZY //默认是懒加载模式
optional=true //表示可以为NULL ,反之不可以为NULL
@JoinColumn(name="order_id") //表示外键名称
@JoinTable(name="student_teacher",inverseJoinColumns=@JoinColumn(name="teacher_id"),joinColumns=@JoinColumn(name="student_id"))
//@JoinTable 表示中间表
//name 表示中间表的表名
//inverseJoinColumns=@JoinColumn(name="teacher_id") 表示被维护端在中间表的外键列名
//joinColumns=@JoinColumn(name="student_id") 表示维护端在中间表的外键列名
五: 联合主键
1.必须有一个public无参的构造函数
2.必须实现Serializable
3.必须重写主键类的hasCode()、equals()方法,必须用复合主键的字段来作为判断这个对象是否相等;
@Embeddable 元数据,表示只使有里面的字段属性; 将嵌入式主键类使用@Embeddable标注,表示这个是一个嵌入式类。
六: JPA缺点
1.没有index注解
2.没有缓存
分享到:
相关推荐
OSGi环境(Eclipse RCP)使用JPA的框架介绍。
详细介绍 jpa 开发文档详细介绍 jpa 开发文档详细介绍 jpa 开发文档详细介绍 jpa 开发文档
第四章节 Spring Boot 整合 Spring Data JPA(SpringBoot 高级)一、Spring Data JPA 介绍Spring Dat
JPA批注参考(主要介绍JPA中的相关注解)
JPA全称为Java Persistence API ,Java持久化API是Sun公司在Java EE 5规范中提出的Java持久化接口。JPA吸取了目前Java持久化技术的优点,旨在规范、简化Java对象的持久化工作。JPA通过JDK 5.0注解或XML描述对象-...
初学jpa,有一些体会和大家分享一下,主要是介绍了jpa中state的概念和应用
Hibernate、iBATIS、TopLink、Castor JDO、Apache OJB等这么多持久层框架,你还在为学习上面那个框架而苦恼吗?你还为研究下一代是那个而头疼吗?...朋友,学习JPA吧!JPA的出现就是解决您上面的苦恼的。
03_JPA详解_搭建JPA开发环境和全局事务介绍.zip
jpa测试用例jpa测试用例jpa测试用例
Jpa详细查询实例介绍,教你如何使用JPA,简单,分类实例。
介绍JPA2的一本很不错的英文书籍,可以作为一本权威参考。
'SpringDataJPA从入门到精通'以SpringBoot为技术基础 从入门到精通 由浅入深地介绍SpringDataJPA的使用。有语法 有实践 有原理剖析。'SpringDataJPA从入门到精通'分为12章 内容包括整体认识JPA、JPA基础查询方法、...
03_传智播客JPA详解_搭建JPA开发环境和全局事务介绍
对JPA的详细介绍,快速入门,同时对常见的数据访问层技术做了介绍和比对
里面介绍了一些JPA的基础知识,适合想了解JPA的大虾门
本文是介绍Spring-data-jpa的PPT的学习笔记,整理了Spring Data JPA相关知识配置和实践源码. 本文介绍知识点有: JPA与Spring的相关配置 JPA 方法名常用查询 JPA 使用@Query注解实现JPQL和本地自定义查询 JPA API 条件...
eclipse3.6创建EJB+JPA+EAR(每个都是单独工程)完整介绍:自动创建表结构、数据源配置、jpa和ejb工程添加到ear包中。以及注入Emanager。 要这么高的分只是为了物有所值。
JPA经典课件.全面介绍开发技术。很不错的。
JPA 详解,详细介绍了JPA的使用,从基本概念到具体例子