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

Java持久化化查询语言如何操作实体

来源: 作者:IT168 胡磊 出处:巧巧读书 2007-11-11 进入讨论组
访问 http://www.qqread.com/java/2007/11/w381046.html
Java持久化查询语言是对EJB 查询语言(QL)的一种扩展。该查询语言允许你同时在你的应用程序的实体上执行动态和静态的查询。这个查询语言有些像 SQL。不过,它确实从 SQL中受益。
Java持久化查询语言操作的是实体和实体间的关系,而不是实际的关系数据库模型。这就使得查询可以移植,不用去管底层的数据库。
查询以三种方式进行: select、update和 delete方式。 select 查询返回数据库中的实体集合。这个通常会有特定的约束,存在于一个有限的集合中。 update 查询改变一个或者多个现存的实体的属性,或者是一个实体集的属性。最后, delete语句数据库中删除一个或者多个的实体。
 你可以有选择的创建查询。最为基本的方法就是简单的从实体管理器中找到一个。下面的查询例子就是使用实体管理器中现存的 createQuery 方法。

Query query = em.createQuery(queryStatement);
当你使用Query 对象后,通过使用更丰富的查询语言,你可以创建,读入,更新,删除实体。虽然 find, remove, persist, 和 merge 方法能很好的工作,但是查询对象为你提供更多的灵活性。

一、实体查找
 
当你检索实体的时候,select 查询会应用到规范标准。下面的查询语言语句选择了 Dodgers球队所有的 player。
select c from Player c where c.team.teamName = 'Los Angeles Dodgers'
构造一个 Query实例和执行它代码如下:

Query q = em.createQuery("select c from Player c where c.team.teamName = 'Los Angeles Dodgers'"); List<Player> playerList = q.getResultList();
当然,你或许想通过设置参数来查找。你能过API实现方法,就是调用 query对象的 setParameter方法。下面的代码创建了同样的查询,并且打印结果,但此时可以让你动态的设定球队的名字:

Query q = em.createQuery("select c from Player c where c.team.teamName = :name"); q.setParameter("name", aTeamName); List<Player> playerList = q.getResultList(); for(Player p : playerList) { System.out.println(p.toString()); }

二、实体更新
 
一旦你检索到一个受管制的实体,无论是通过查询数据库得到的,还是通过使用find 方法得到的,更新实体就和修改实体的属性一样简单,提交已经启动的事务就可以了。举个例子,你可以通过简单的调用 player实体的setJerseyNumber 方法改变一个 player的号码。一旦你提交了事务,实体就被更新,有了新的号码。下面的例子中,所有的player都更新了他们运动衫上的球衣号码。

em.getTransaction().begin(); for(Player p : playerList) { // add 1 to each players jersey number int jersey = p.getJerseyNumber(); p.setJerseyNumber(jersey + 1); } em.getTransaction().commit();
当然,一个查询也能实现同样的功能:
Query q = em.createQuery("update Player p " + "set p.jerseyNumber = (p.jerseyNumber + 1) " + "where p.team.teamName = :name"); q.setParameter("name", aTeamName); em.getTransaction().begin(); q.executeUpdate(); em.getTransaction().commit();
三、删除实体
 
最后,你可以使用查询来删除实体。下面的代码就是从数据库中删除了 Anaheim Angels球队。

String aTeamName = "Anaheim Angels"; ... Query q = em.createQuery("delete from Team t " + "where t.teamName = :name"); q.setParameter("name", aTeamName); em.getTransaction().begin(); q.executeUpdate(); em.getTransaction().commit();


更多文章 更多内容请看SQL Server 索引和查询专题Java环境安装配置Java编程开发手册专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
较早的文章:Java持久化API概述及使用

较新的文章:JAVA代理机制初探
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章