博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JPA注解记录
阅读量:7131 次
发布时间:2019-06-28

本文共 2708 字,大约阅读时间需要 9 分钟。

hot3.png

-------------------------------------------------------------------

@NotFound(action=NotFoundAction.IGNORE)

使用hibernate 

注解配置实体类的关联关系,在many-to-one,one-to-one关联中,一边引用自另一边的属性,如果属性值为某某的数据在数据库不存在了,hibernate默认会抛出异常。解决此问题,加上如下注解就可以了:

@NotFound(action=NotFoundAction.IGNORE),意思是找不到引用的外键数据时忽略,NotFound默认是exception

-------------------------------------------------------------------

cascade = CascadeType.REFRESH,cascade=CascadeType.ALL

cascade表示级联操作:

  1. CascadeType.MERGE级联更新:若items属性修改了那么order对象保存时同时修改items里的对象。对应EntityManager的merge方法

  2. CascadeType.REFRESH级联刷新:获取order对象里也同时也重新获取最新的items时的对象。对应EntityManager的refresh(object)方法有效。即会重新查询数据库里的最新数据  

  3. CascadeType.PERSIST级联保存:对order对象保存时也对items里的对象也会保存。对应EntityManager的presist方法   

  4. CascadeType.REMOVE级联删除:对order对象删除也对items里的对象也会删除。对应EntityManager的remove方法  

  • CascadeType.PERSIST只有A类新增时,会级联B对象新增。若B对象在数据库存(跟新)在则抛异常(让B变为持久态)

  • CascadeType.MERGE指A类新增或者变化,会级联B对象(新增或者变化)

  • CascadeType.REMOVE只有A类删除时,会级联删除B类;

  • CascadeType.ALL包含所有

  • CascadeType.REFRESH没用过。

  • 综上:大多数情况用CascadeType.MERGE就能达到级联跟新又不报错,用CascadeType.ALL时要斟酌下CascadeType.REMOVE

-------------------------------------------------------------------

@Fetch:

定义了加载关联关系的获取策略. FetchMode 可以是

SELECT (在需要加载关联的时候触发select操作),     SUBSELECT(只对集合有效,使用了子查询策略,详情参考Hibernate参考文档)

JOIN (在加载主实体(owner entity)的时候使用SQL JOIN来加载关联关系).

JOIN 将覆写任何延迟属性 (通过 JOIN策略加载的关联将不再具有延迟性).

fetch=FetchType.LAZY

Hibernate的数据加载方式: 
1.即时加载 immediately loading

       实体加载完成后,立即加载其关联的数据。

2.延迟加载lazy loading

       实体相关联的数据在第一次访问时再进行读取。 

3.预先加载 eager loading

        与immediately loading类似,但实体和相关联的数据是通过一条sql同时读取。

4.批量加载 batch loading 

------------------------------------------------------------------

EntityManager 的API 

下面是EntityManager的一些主要的接口方法: 
void persist(Object entity) 
      通过调用EntityManager的persist()方法,新实体实例将转换为受控状态。这意谓着当persist()方法所在的事务提交时,实体的数据将保存到数据库中。如果实体已经被持久化,那么调用persist()操作不会发生任何事情。如果对一个已经删除的实体调用persist()操作,删除态的实体又转变为受控态。如果对游离状的实体执行persist()操作,将抛出IllegalArgumentException。 在一个实体上调用persist()操作,将广播到和实体关联的实体上,执行相应的级联持久化操作; 

void remove(Object entity) 

      通过调用remove()方法删除一个受控的实体。如果实体声明为级联删除(cascade=REMOVE 或者cascade=ALL ),被关联的实体也会被删除。在一个新建状态的实体上调用remove()操作,将被忽略。如果在游离实体上调用remove()操作,将抛出IllegalArgumentException,相关的事务将回滚。如果在已经删除的实体上执行remove()操作,也会被忽略; 

void flush() 

      将受控态的实体数据同步到数据库中;

merge(T entity) 

      将一个游离态的实体持久化到数据库中,并转换为受控态的实体;

find(Class entityClass, Object primaryKey) 

      以主键查询实体对象,entityClass是实体的类,primaryKey是主键值,如以下的代码查询Topic实体: Topic t = em.find(Topic.class,1); Query createQuery(String qlString) 根据JPA的查询语句创建一个查询对象Query,

如下面的代码: 

Query q= em.createQuery(""SELECT t FROM Topic t WHERE t.topicTitle LIKE :topicTitle")"); 

Query createNativeQuery(String sqlString) 

使用本地数据库的SQL语句创建一个Query对象,Query通过getResultList()方法执行查询后,返回一个List结果集,每一行数据对应一个Vector。 

转载于:https://my.oschina.net/heroShane/blog/198355

你可能感兴趣的文章
JS比较好用的一些方法搜集
查看>>
React Native导航器之react-navigation使用
查看>>
百度2016笔试题第一题:页面请求失败值
查看>>
实现网站图片瀑布流重点记录
查看>>
软件测试全职以及兼职平台以及薪酬报价
查看>>
Javascript:日期排班功能实现
查看>>
git push之后回滚(撤销)代码
查看>>
数组,字符串互相转化
查看>>
linux centos下配置静态ip地址
查看>>
Maven学习总结(三)——使用Maven构建项目
查看>>
Computer Vision & MultiMedia 相关国际会议汇总
查看>>
vs2008在win7系统中安装不问题
查看>>
HDU-1520 Anniversary party
查看>>
springmvc web.xml配置之 -- ContextLoaderListener
查看>>
java_数组作缓存池的不可变类实例
查看>>
webservice主流框架Axis、Axis2、XFire、CXF的比较
查看>>
lambda
查看>>
Master Nginx(3) - Using the Mail Module
查看>>
4、jeecg 笔记之 自定义显示按钮 (exp 属性)
查看>>
大白话5分钟带你走进人工智能-第二十八节集成学习之随机森林概念介绍(1)
查看>>