EJB QL :EJB Query LanguageU P
解决方案 »
- 大神,求助,怎样让struts.xml可以读取并加载jar包里的类
- java web中怎么样在页面中显示数据库中的数据啊
- Wblogic下WebService客户端调用问题
- 再次请求下Struts2类型转换问题,请高手帮忙看看。
- NetBean6.5与MyEclipse的S2SH集成问题
- 请高手指教:用Myeclipse新建的hibernate工程中,执行cfg.buildSessionFactory()出错
- eclipse怎样配置oracle 10gAS服务器?
- 麻烦hibernate高手帮忙,3表以上联查index-many-to-many问题
- 女孩问:j2ee适合我吗?
- 大家都用什么编译器阿?推荐一下.谢谢各位了!
- jdom处理 xml时的中文问题??
- 在开发ejb时为什么要用PortableRemoteObject,具体含义是什么?
SELECT OBJECT(t)
FROM Team AS t
WHERE t.city.name = ?1选出某个城市里面的所有球队,Team是schemaName,t是别名
t.city是与Team关联的CityBean的cmr字段,name是CityBean的一个
cmp字段,而?1是方法的参数,后面的1代表第一个参数
保证有分。
EJB QL简明使用指南
EJB2.0 规范介绍了EJB QL,一种用于实体Bean的finders的轻便的(容器无关的)查询语言。EJB QL是一种类SQL语言,它用单个WHERE字句去选择一个或多个实体Bean对象。EJB QL的查询范围是多个EJB的列表,它们被定义在ejb-jar.xml文件中(Bean的所有CMP的字段的集合和它们相关的数据库字段)。因为EJB QL是容器无关的,所以被定义在ejb-jar.xml中而不是在weblogic-cmp-rdbms-jar.xml中。 基本语法 基本的EJB QL查询包括一个命令和一个FROM字句,以及一个WHERE子句。
WHERE子句定义了查询结果集的限制条件,与WLQL语言类似。所以,下面重点阐述的EJB QL子句和操作符。 注意:因为 EJB QL 查询字串可能包括">" 和 "<" 字符,所以它总是放在CDATA标签中,以避免与XML的标签冲突。 EJB QL 中的字串 与 WLQL一样,EJB QL 用单引号指定字串值。 如果在字串值中表示单引号,可以用两个连续的单引号,如:
WHERE accountType = 'partner''s' Finder 参数占位符 EJB QL 可以用?n描述finder方法的参数, n 是这个参数在finder方法参数表中的位置。在EJB QL,第一个参数描述为?1。 注意: 如果你对WLQL很熟悉,这里要注意的是EJB QL不同于WLQL ,它的参数点位符是从1开始的,而WLQL却是从0开始,所以在WLQL语言中,第一个参数是0,(即$0),但是在EJB QL中却是1,即(?1)。 EJB QL 操作符 EJB QL 使用的逻辑和数学操作符与WLQL相类似,可以参考 Migrating from WLQL to EJB QL 一节内容。关于EJB QL操作符更多信息可以参考EJB 2.0 specification 。 Finder方法 实体Bean的home接口定义了一个或多个finder方法。它定义了各种方法在home中查找一个实体对象或多个实体对象的集合。实体bean的实现使用这个finder方法的参数去定位一个实体对象。这些finder方法必须要与一个在布署描述符中的query元素相关联。实体bean在布署描述符中规范了EJB QL查询字串并且与finder方法关联在一起。finder 方法在query元素中被字符化成EJB QL查询字串。 Select 方法 Select 方法是实体Bean实例中一些特别的finder方法。Select 方法是在实体Bean的实现类中定义的抽象方法。这些方法被定义成为EJB QL查询字串。尽管这些Select方法与finder方法很相似,但是它们可以返回任何一个CMP字段或CMR字段。EJB QL字串规定一个Select方法必须有一个指定了返回类型的SELECT子句。由一个调用查询字串的EJB实例来执行相关的Select方法。 EJB QL 条件表达式 下面总结了所有的你可以在EJB QL查询的WHERE子句中使用的条件表达式。如需更多信息,请参考EJB 2.0 specification : EJB QL表达式
功能
举例
[NOT] BETWEEN
指定字段值在(或不在)一个给出的范围值内。
WHERE accountId BETWEEN 1000 and 2000
[NOT] IN
查找那些指定字段与特定的字符串列表中元素相匹配的EJB。注意:这个列表只能包含字符串。
WHERE accountId IN ('1000', '1020', '1025')
[NOT]EQUAL
选择相等。在这个beta版:l 不支持远程关系;NOT EQUAL 只支持CMP 字段; l 不支持关第,只支持CMP字段和本地EJB接口;
WHERE accountId EQUALS 1000 = 1000
[NOT] LIKE
ESCAPE
根据通配符(%) 和提供的text_string 查找匹配的EJB对象。在这个Beta版:· 不接受参数作为变量;使用 ESCAPE 选项可能会产生错误;
WHERE accountType LIKE `custom%'
IS [NOT] NULL
测试一个NULL值本beta版:· 不支持 1 - N 关系,如果这个N的角色被测试为NULL时。不支持对称的 M-N 关系,M-N 包括相同的Bean和CMR 字段。
WHERE accountId IS NOT NULL
EJB QL 例子 下面从ejb-jar.xml文件中引用了一些例子来描述EJB QL查询字串。 这个例子返回一个AccountBean的集合,它们的balance值是大于在findBigAccounts方法中传递的参数: <query>
<query-method>
<method-name>findBigAccounts</method-name>
<method-params>
<method-param>double</method-param>
</method-params>
</query-method>
<ejb-ql>
<![CDATA[WHERE balance > ?1]]>
</ejb-ql>
</query> 下面的例子ejb-ql元素返回一个account balance: <ejb-ql><![CDATA[WHERE accountType IN ('partners', 'channels')]]></ejb-ql> 下面的例子ejb-ql元素返回一个EJB集合,他们的accoutType字段是NULL: <ejb-ql><![CDATA[WHERE
accountType IS NULL]]></ejb-ql> 译自Weblogic帮助文档,译者:sharetop([email protected])
SELECT OBJECT(t)
FROM Team AS t
WHERE t.city.name = ?1 与
SELECT OBJECT(t)
FROM Team AS t,IN (t.city) AS c
WHERE c.name = ?1 有何区别?
一定给分的