比如:select OBJECT(p) from tba p where p.name like ?1---->這種方法在JBoss下面是行不通的.
--------------------------------------------------------------------------
聲明:這個NB的方法並非小弟所爲,而是ACCP(QQ:無域之綠)原創,小弟受他所教.並不敢一人獨享.有什麼高見還請大家多多指教.歡迎轉貼.鼓勵共享!
1.先創建一個Finder方法,findByLike(String abc,Object[] agrs)
參數名可以隨便定,但類型必須是上面的,這是規定
2.裏面的QL語句保持爲空,
3.另外寫一個方法,比如getIdByValue(value);
public Collection getIdByValue(String value) throws FinderException {
StringBuffer jbossQL = new StringBuffer();
jbossQL.append("SELECT o.id FROM Teacher o WHERE ");
jbossQL.append("o.name LIKE ?1 ");
Object[] args = new Object[1];
args[0] = "%" + value + "%";
return findByLike(jbossQL.toString(),args);
}
其中findByLike(jbossQL.toString(),args)就是第一步所創建的那個空的方法.
你要調用的就是這個方法了,裏面的QL語句自己改改就可以用了.
在ejb-jar.xml中可以找到你剛纔創建的那個空的Finder方法的xml描述,比如
<query>
<query-method>
<method-name>ejbSelectIdByQuery</method-name>
<method-params>
<method-param>java.lang.String</method-param>
<method-param>java.lang.Object[]</method-param>
</method-params>
</query-method>
<ejb-ql />
</query>
把這些內容拷到jbosscmp-jdbc.xml中(對應的那個實體bean的
<ejb-name>TbaConart</ejb-name>標籤後面)
把裏面的<ejb-ql/>改爲<dynamic-ql/>
到此編譯,部署,大功告成