ejbSelect
http://www.caucho.com/resin-3.0/cmp/tutorial/cmp-select/index.xtp

ejbSelect provides a more flexible method to query the database than find methods. Find methods belong to a home interface and only return the corresponding local object. A findFoobar method in StudentHome can only return a Student or a collection of Students. ejbSelect methods can return any type in the database or a collection of database objects. They are restricted to the entity bean implementation class; you'll need to write a separate business method to expose the results of the query.

Like find methods, ejbSelect methods use the deployment descriptor to define the EJB-QL query. Resin-CMP will generate the appropriate SQL for the select.

Database Schema


select.sql CREATE TABLE select_student (
name VARCHAR(250) NOT NULL,
house VARCHAR(250) NOT NULL,
gender VARCHAR(6) NOT NULL,

PRIMARY KEY(name)
);

CREATE TABLE select_house (
name VARCHAR(250) NOT NULL,

PRIMARY KEY(name)
);



ejbSelectBoys


The ejbSelect method for the example is in the HouseBean class. There are no real limitations on which bean implemenation has the ejbSelect method. All the entity beans in the database are accessible. However, ejbSelect methods are not visible in either the home or the local interfaces. If the bean needs to make the results visible, you'll need to create a business method to collect and return the selected results.

Unlike the find methods, ejbSelect needs an abstract method in the bean implementation. Finds declare the find method in the home interface; selects declare the ejbSelect method in the bean implementation.

public abstract Collection ejbSelectAllBoys(House house)
throws FinderException;



The select query is defined in the deployment descriptor like the find query. The following is the query for the example.

Select boys query SELECT student.name
FROM select_house house, IN(house.studentList) student
WHERE student.gender='Boy' AND house=?1
ORDER BY student.name



The required SELECT clause may return any cmp-field or cmr-field or any collection of either. In this case we'll return a collection of strings. This return value would be illegal in a find method because a find method could only return Student (and HouseHome couldn't return the Student interface from a find method.)

The required FROM clause defines the abstract tables, traversing relations as necessary. In this case, we define the variable student to range over all the students in the house. All collection-valued relations will use IN expressions to define a query variables.

The optional WHERE clause can use normal expressions like '=' or boolean expressions. WHERE can use ejbSelect arguments with the '?1' expression.

The optional ORDER BY clause is a Resin-CMP extension to EJB-QL. It orders the select so the boys will be listed alphabetically. Because the ORDER BY clause is so useful, a future version of the EJB 2.0 spec will certainly include it.

Hofman: RESIN的教程确实不错。

hofman   2005-11-19 22:30:08 评论:0   阅读:1155   引用:0

发表评论>>

署名发表(评论可管理,不必输入下面的姓名)

姓名:

主题:

内容: 最少15个,最长1000个字符

验证码: (如不清楚,请刷新)

Copyright@2004-2010 powered by YuLog