传知_14_jpa

JPA

三个核心组件(EntityManager,,JPQL

JPA实体状态演化

find() /getReference() --new --新建

save -- 托管

-- close(),clear()--脱管

-- delete() --删除

----垃圾回收

 

merge()     不会把当前实体转为托管状态

remove()    要求必须处于托管状态

 

应用程序面向JPA编程,底层ORM技术可以自由切换

OJBOpenJPA    ---开源免费的ORM框架

java领域的3大服务器

IBM                              WebSphere

Oracle(Bea)                            WebLogic(OpeenJPA)

JBoss                                      JBoss(Hibernate JPA实现)

 

Hibernate带给开发者的是简便的、面向对象的开发

JPA带给开发者的是一种统一:它可以结束各个ORM框架的斗争

 

局部事务:          通过Connection控制的

全局事务:通过UserTrasaction控制

 

 

Hibernate:

POJO + 映射文件  ----PO

JPA

POJO + Annotation ----- Entity                  DEMO (课堂版,不用)

 

所有的持久化操作必须在事务中完成。

 

EntityManagerFactory emf = Persistence

           .createEntityManagerFactory("qs");

       EntityManager em = emf.createEntityManager();

 

对于JavaSE ,persistence.xml直接放到类加载目录META-INF目录下

对于EJBpersistence.xml放到 EJB META-INF目录下

对于webpersistence.xml放到 web-inf目录下的 META-INF目录下

DEMO     EE实战教程 代码)

 

大数据,上传图片 DMEO

 

一个持久单元对应一个EntityManagerFactory

 

注释:              DEMO

@Entity      可以指定一个实体,类

@Table(name="fff")    

普通属性不用映射,会自动的

@Transient          表示此属性不会保存到数据库中

@Lob         修饰大数据类型

@Basic      指定是否缓迟加载大数据类型

映射复合属性

Embeddable
       Embedded     

AttributeOverride

映射主键

@Id

@GeneratidValue()

        

 

关联关系:              DEMO               DEMO(课堂版)

OneToOne        MapBy属性的是主表

1.应该通过主表实休来控制关联关系

2.保存实体时,先保存主表的实体,否则会多出update语句

OneToMany    

JoinColumn  外键列名       MapBy属性的是主表

通过从表实体控制关联关系

ManyToMany

joinTable    连接表      

应该在两边增加joinTable ,除非增加了MapBy(增加了MapBy的是主实体)

 

关联实体排序:     DEMO OrderBy

 

继承映射:     DEMO(课本版)       DEMO(课堂版)

DiscriminatorColumn   增加辨别者列

DiscriminatorValue      

 

托管 manage(被管)

脱管 detached(游离)

 

Hibernate有拦截器和事件机制:

通过拦截器

onSave()

onDelete()

onLoad()

..

SessionSave()方法就触发onSave()

.....load    onLoad

 

JPA更灵活

@Prepersist

 任意方法名()

@PostLoad....

 

生命周期           DEMO

如上例直接在实体内定义生命周期,不好,可以独立下来,专门放生命周期方法(类监听器)

实体内@EntityListeners(PersonPersistListener.class)    DEMO

 

JPA查询: DEMO

JPQLHQL的最大区别在于:

1.JPQL不能省略select子句。(在特殊情况,如果使用Hibernate的实现,允许select省略)

2.JPQL中占位符参数可以紧跟一个NN代表一个索引值

 

Query既支持JPQL查询也支持原生的SQL查询

QueryEntityManager创建

 

下面 两个都属性JPQL查询

createNamedQuery(String name)

createQuery(String qlString)

原生SQL查询

createNativeQuery(

 

既可以使用?占位符,也可以使用参数设置

setParameter(

Query(select ... ?1 .... ?2)

setParameter( 1 , "xxx")

 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

折腾数据折腾代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值