频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

JPA重整ORM山河

来源:IT168 作者:它山 出处:巧巧读书 2007-10-05 进入讨论组
上一页 1 2 3 4 5 6 7 下一页 
访问地址 http://www.qqread.com/java/2007/03/w300113.html

EntityManager的创建过程 

javax.persistence.spi.PersistenceProvider接口由JPA的实现者提供,该接口由启动者调用,以便创建一个EntityManagerFactory实例。它定义了创建一个EntityManagerFactory实例的方法: 

EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map) 

javax.persistence.spi.PersistenceUnitInfo入参提供了创建实体管理器所需要的所有信息,这些信息根据JPA的规范,必须放置在META-INF/persistence.xml文件中。 

PersistenceUnitInfo接口拥有了一个void addTransformer(ClassTransformer transformer)方法,通过该方式可以添加一个javax.persistence.spi.ClassTransformer,并通过PersistenceProvider开放给容器,以便容器在实体类文件加载到JVM之前进行代码的增强,使元数据生效。JPA厂商负责提供ClassTransformer接口的实现。 

图4描述了创建EntityManager的过程:

JPA重整ORM山河(图四)

点击查看大图

实体的状态 

实体对象拥有以下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。 

进入讨论组讨论。
上一页 1 2 3 4 5 6 7 下一页 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章