JPA的实体状态和API浅析

实体对象拥有以下4个状态,这些状态通过调用EntityManager接口方法发生迁移:

新建态:新创建的实体对象,尚未拥有持久化主键,没有和一个持久化上下文关联起来。受控态:已 经拥有持久化主键并和持久化上下文建立了联系; 游离态:拥有持久化主键,但尚未和持久化上下文建 立联系; 删除态:拥有持久化主键,已经和持久化上下文建立联系,但已经被安排从数据库中删除。

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()

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

T merge(T entity)

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

T 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。

Query

JPA使用javax.persistence.Query接口代表一个查询实例,Query实例由EntityManager通过指定查询 语句构建。该接口拥有众多执行数据查询的接口方法:

Object getSingleResult():执行SELECT查询语句,并返回一个结果;

List getResultList() :执行SELECT查询语句,并返回多个结果;

Query setParameter(int position, Object value):通过参数位置号绑定查询语句中的参数,如果 查询语句使用了命令参数,则可以使用Query setParameter(String name, Object value)方法绑定命名 参数;

Query setMaxResults(int maxResult):设置返回的最大结果数;

int executeUpdate():如果查询语句是新增、删除或更改的语句,通过该方法执行更新操作。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索查询
, 方法
, query
, 语句
, 返回主键
, 游离 持久转换
, entitymanager
, getResultList
, 一个
, 调用api接口实例
实体
jpa 实体状态、jpa自动生成实体类、jpa实体类注解、jpa update 实体、idea jpa 生成实体类,以便于您获取更多的相关知识。

时间: 2024-10-07 19:05:37

JPA的实体状态和API浅析的相关文章

EF里查看/修改实体的当前值、原始值和数据库值以及重写SaveChanges方法记录实体状态

原文:EF里查看/修改实体的当前值.原始值和数据库值以及重写SaveChanges方法记录实体状态 本文目录 查看实体当前.原始和数据库值:DbEntityEntry 查看实体的某个属性值:GetValue<TValue>方法 拷贝DbPropertyValues到实体:ToObject方法 修改DbPropertyValues当前值:索引器 克隆实体:Clone方法 设置实体的值:SetValues方法 克隆实体:SetValues 获取和设置实体的单个属性:Property方法 查询实体的

java-请问jpa删除实体有级联关系删不掉怎么办????

问题描述 请问jpa删除实体有级联关系删不掉怎么办???? 就是主要是想删除一个班里的某一个学生但不想影响老师那张表中的数据,delete 不掉,报异常"Error while committing the transaction" 解决方案 http://blog.csdn.net/eddle/article/details/6919552

HTML5的一个显示电池状态的API简介

  移动设备的份额在网络流量中在大量增长,其所贡献的网络流量非常庞大,以至于为了移动设备,我们单独创建了一些API和设计理念.一个非常典型的例子是 W3C电池状态API,它允许一个应用程序获知设备的电池状态信息.这篇文章探索了这个新的API,为你展示了如何把它整合进你现有的应用程序. 检测设备是否支持 目前电池API依旧没有得到主流支持.因此,在使用这个API前需要确认当前设备是否支持此API.下面展示的函数返回一个布恩值(True/False),指示当前浏览器是否支持电池状态API. 该函数首

magento -- 关于更新订单状态的API接口函数

做Magento和其他系统的对接时需要调用Magento的Api,原以为更新一个订单的状态这样的函数Magento默认肯定自带有,一开始却找不到,打开官网看order部分提供的接口函数列表也没找到.   按说明,从上到下依次为批量获取订单,获取单个订单,给订单添加备注,锁定订单,解锁订单和取消订单.在我认为不存在这个函数准备自己写一个的时候,看代码发现其实addComment这个函数已经提供了更新订单状态的功能,而不仅仅是添加备注,看代码 public function addComment($

请问环信的sdk中有判断当前网络是wifi,3g,4g这样状态的api吗?

问题描述 解决方案 SDK有提供判断网络类型的接口,但是需要您实现一下,给您发个链接您先看看http://docs.easemob.com/doku.p ... ledoc        由EMDeviceManager去实现IDeviceManager.h中导入头文件IDeviceManagerBase.h,遵守IDeviceManagerBase协议,然后可以在根控制器中注册deviceManager的代理,[[EaseMob sharedInstance].deviceManager re

Hibernate实体状态问题:临时状态、托管状态

问题描述 UserInfouserInfo=newUserInfo();Sessionsession=HibernateSessionFactory.currentSession();Transactiontx=session.beginTransaction();①session.load(userInfo,newLong(11117));②session.delete(userInfo);tx.commit();HibernateSessionFactory.closeSession();此

ZooKeeper Watch Java API浅析exists

        Watch是ZooKeeper中非常重要的一个机制,它可以监控ZooKeeper中节点的变化情况,告知客户端.下面,我们以代码为例来分析Watch在ZooKeeper中是如何实现的.ZooKeeper中一共由三种方法可以实现Watch,分别为getData.exists和getChildren,今天我们先来看下exists()方法:         2.exists() import java.io.IOException; import org.apache.zookeeper

ZooKeeper Watch Java API浅析getData

        Watch是ZooKeeper中非常重要的一个机制,它可以监控ZooKeeper中节点的变化情况,告知客户端.下面,我们以代码为例来分析Watch在ZooKeeper中是如何实现的.ZooKeeper中一共由三种方法可以实现Watch,分别为getData.exists和getChildren,今天我们先来看下getData()方法:         1.getData() import java.io.IOException; import org.apache.zookeep

ZooKeeper Watch Java API浅析getChildren

        Watch是ZooKeeper中非常重要的一个机制,它可以监控ZooKeeper中节点的变化情况,告知客户端.下面,我们以代码为例来分析Watch在ZooKeeper中是如何实现的.ZooKeeper中一共由三种方法可以实现Watch,分别为getData.exists和getChildren,今天我们先来看下getChildren()方法:         3.getChildren import java.io.IOException; import org.apache.z