下面是一个EJB QL的语法,关于IN的,你看看select object(o) from apptable a, IN(a.items) o where a.name = ?1
一个a 对应好几个o,取其中的一个要用IN
一个a 对应好几个o,取其中的一个要用IN
解决方案 »
- java创建String对象
- 急急急!SSH问题,No setter found for property 'tTreeDao' in class 'com.web.bo.Home.TTre
- 为什么我JDBC连接Oracle数据库的时候调试JSP页面的时候会出现这个?
- Spring中一个bean的属性值能否注入另一个bean方法
- ssh 不能级联删除 (对者全分)
- struts与spring整合问题疑难
- JAVA中类名字包括$符号,求高手赐教一下,这具有什么意义呢?
- 我如何将这个字符串转成XML时中文部分不出现乱码
- 如何在抓到Exceptions的时候数据库自动回滚
- 向struts2 web工程的lib目录下拷贝struts2-convention-plugin-2.3.16.3.jar后,出现错误。
- 出个小小的题目
- EJB问题
这条我能够理解.
我现在的问题是where里面我的i.ID应该在几个变量中,这些变量数目较多且数量是不固定的,所以我想用IN.否则用i.ID = ?1 OR i.ID = ?2 OR ...应该就可以了.
但是刚才在网上查,看到有人也在问这个问题,结果没有解决,还是在用上面OR的办法.
那么是否这个问题跟EJB-QL本身有关系,目前就是不能那么用IN呢,请知道的高手说一下.如果就是不可以有什么别的办法可以达到同样的目的呢?
非常感谢.
匆匆测试了一下得到了一个SQL error:
"Illegal mix of collations (utf8_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation ' IN '"
应该是字符问题,先解决这个问题然后才能测试IN的问题.
但测试的时候还是出现上面的错误:
"Illegal mix of collations (utf8_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation ' IN '"
在数据库(MySQL5.0)里我的表是用utf8字符集的,项目是用JBuilder做的,项目的缺省字符集也是UTF-8,但看来IN里还是有问题.
如果是SELECT OBJECT(i) FROM Place AS i WHERE i.ID = ?1就没有问题,如果是SELECT OBJECT(i) FROM Place AS i WHERE i.ID IN (?1)就出现上面错误,?1是一样的.即使把?1 new成UTF-8的字符串也还是上边的错误,不知道那里用了latin1_swedish_ci字符集.
有碰到过这个问题的朋友能否来说说呢,或者我该把问题贴到数据库区.
谢谢.
这里有些简单说明。
JBOSS-QL应该是EJB-QL的超集,支持ORDER BY,在IN,LIKE里可以用变量。只是这样可移植性就很差了。
尝试过用mysql的CONVERT(?1,"utf8")结果还是一样的.
现在用xxx = ?1就没问题,用xxx IN (?1) 就出上面的问题.
看来只好多写几个finder方法了,或者干脆用BMP的entity bean.
哪位兄台能给点思路吗,谢谢.
我要做下去了,不能停留在这个问题上了,晚上结贴吧.
谢谢.
惨痛的教训:曾经在weblogic下写的ejb平移到websphere下,因为使用了QL,结果几乎都从写了。还有各家提供的QL语法不尽相同,没有统一的标准,给java一次编译随处运行大打折扣。比如上述的in语法据我所知目前QL不支持(至少在weblogic、websphere下),还有诸如order by的问题……
放弃~~~
自己写