1、 jpa 是一种技术规范,相当于一个接口,不是一种框架,它需要配合持久框架(hibernate、toplink、jdo)来使用。例如hibernate实现了jpa ……
jpa的缺点:它没有建数据库的索引,它也没有缓存。
2、使用jpa的俩种方式:
(1)先建表,后根据表来编写配置文件和bean,使用这种方案的开发人员受到了传统数据库建模的影响。
(2)先编写配置文件和实体bean,然后再生成表。使用这种方案的开发人员采用是领域建模的思想,这种思想更加OOP。
3、jpa有一个固定名称的配置文件persistence.xml,放在META-INF目录下。
4、jpa的配置文件中有以下属性 “hibernate.dialect”:方言,hibernate.hbm2ddl.auto:自动建表value="update",应用启动的时候建表,当这个表存在表结构没有变化的时候,不创建,如果有变化,不存在的时候,创建。
5、事务类型:本地事务、全局事务。Transaction-type="RESOURCE-LOCAL",一般情况下用本地事务。
本地事务应用场合:同一个数据的转账。
全局事务应用场合:转账,俩个数据库(JTA.getUserTranction().begin(); JTA.getUserTranction().commit(); )俩次提交协议,俩个true之后才能提交
6、使用注解,提高开发效率。?注解的缺点:让代码太乱,让人不知道它的作用。
7、javax开头的包,一般是sun公司制定的技术规范。
8、主键生成的注解 @GeneratedValue(strategy=GenerationType.AUTO),AUTO是默认的类型。
根据方言(不同数据库)来决定主键生成策略。
其他strategy 有:IDENTITY (自增) SEQUENCE(序列) TABLE(表) CLASS
9、用以下单元测试的代码测试实体映射到表是否成功(是否有生成表)
在创建sessionFactory的时候生成了表。EntityManagerFactory 相当于hibernate的SeesionFactory。
10 、常用的映射关键字:
大数据字段映射和字段延迟加载:
LONGBLOB
懒加载,当不访问这个字段的时候,不会让它载入内存中;到访问它的时候,才加载这个字段
10、jpa的方法
find(object obj,object args); 相当于hibernate的get();
getReference(object obj,object args);相当于hibernate的load()--延迟加载; 如果没有具体访问到字段,字段并没有加载(没有真正查询)。
11、jpa中对象的四张状态:
new(新建状态):产生实例的时候
managed(托管):
游离状态:
删除状态:
如上图,可在person.setName("老黎");后面加上em.merge(person),此方法能让游离的对象同步到数据中,让数据库修改成功。
12、jpa与持久化框架实现产品对接的源码
13、面向对象的查询语句
**在查询语句中添加参数的时候不要直接把值赋给字段,容易引起安全问题(sql注入);
14、jpa双向的一对多,多对一,多对多的关联和级联操作
一对多 订单对订单项 多的一方为关系维护端,关系维护端负责外键记录的更新,关系被维护方是没有权利更新外键字段的。
注意:这四种级联操作并不是对所有的操作的适用,应用场合:只有调用persistent(),增加级联才管用,merge()---更新级联,remove()--删除级联。
ps:em.refresh(person)获取最新数据(直接从数据库取,而不是从缓存取)。
15、一对多的延迟加载与关系维护
上图的默认是立即加载,注意:如果是ONETOMANY的时候,一定要设延迟加载,否则对性能影响很大。
optional属性 (选项)值有:true、false 如果为true意为可选,可为空。如果为false,必须有值。
外键设置:@joinColumn(name="")
16、双向一对一的关系映射
现实生活中的一对一,如人和身份证,夫妻。
17、双向多对多的关系映射
现实生活中的老师和学生。多对多的关系通过中间表来体现它们的关系。
关系维护端,自动生成中间表来体现:
如果要删除被维护端的数据,需要先解除和维护端的关系,才可删除被维护段;
如果要删除维护段的数据,直接删除,无需解除关系。
18、jpa中的联合主键
开发中经常使用俩个或多个字段联合在一起作为主键,这种组合就叫做联合主键。
19、annotation(注解)语法及应用