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():如果查询语句是新增、删除或更改的语句,通过该方法执行更新操作;
6.JPA的查询语言
JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是Hibernate HQL的等价物。
简单的查询
你可以使用以下语句返回所有Topic对象的记录:
SELECT t FROM Topic t
t表示Topic的别名,在Topic t是Topic AS t的缩写。
如果需要按条件查询Topic,我们可以使用:
SELECT DISTINCT t FROM Topic t WHERE t.topicTitle = ?1
通过WHERE指定查询条件,?1表示用位置标识参数,尔后,我们可以通过Query的setParameter(1, "主题1")绑定参数。而DISTINCT表示过滤掉重复的数据。
如果需要以命名绑定绑定数据,可以改成以下的方式:
SELECT DISTINCT t FROM Topic t WHERE t.topicTitle = :title
这时,需要通过Query的setParameter("title", "主题1")绑定参数。
关联查询:从One的一方关联到Many的一方
返回PollOptions对应的PollTopic对象,可以使用以下语句:
SELECT DISTINCT p FROM PollTopic p, IN(p.options) o WHERE o.optionItem LIKE ?1
这个语法和SQL以及HQL都有很大的区别,它直接实体属性连接关联的实体,这里我们通过PollTopic的options属性关联到PollOption实体上,对应的SQL语句为:
|
该查询语句的另外两种等价的写法分别是:
|
和
|
关联查询:从Many的一方关联到One的一方
从Many一方关联到One一方的查询语句和前面所讲的也很相似。如我们希望查询某一个调查主题下的所示调查项,则可以编写以下的查询语句:
|
对应的SQL语句为:
|
使用其它的关系操作符
使用空值比较符,比如查询附件不空的所有帖子对象:
|
范围比较符包括BETWEEN..AND和>、>= 、<、<=、<>这些操作符。比如下面的语句查询浏览次数在100到200之间的所有论坛主题:
SELECT t FROM Topic t WHERE t.topicViews BETWEEN 100 AND 200
图 文 结 合:http://www.qqread.com/java/2007/03/w300113.html进入讨论组讨论。相关专题
- 精通Hibernate之映射继承关系(四) (0次浏览)
- 何不将Java与.NET合二为一? (0次浏览)
- Hibernate的JNDI名称绑定分析 (0次浏览)
- 精通Hibernate之映射继承关系(一) (0次浏览)
- 精通Hibernate之映射继承关系(二) (0次浏览)
- 美国计算机教授语出惊人:Java对学生有害 (0次浏览)
- JDK 6 JRE 6 Update 4 (0次浏览)
- 三步教你改善Java代码质量 (0次浏览)
- Java语言入门 简述Java语言回收机制 (0次浏览)
- 2008年Java开发者最迫切的五个期望 (0次浏览)



