下面是一个EJB QL的语法,关于IN的,你看看select  object(o)  from  apptable  a,  IN(a.items)  o  where  a.name  =  ?1  
一个a  对应好几个o,取其中的一个要用IN

解决方案 »

  1.   

    谢谢.
    这条我能够理解.
    我现在的问题是where里面我的i.ID应该在几个变量中,这些变量数目较多且数量是不固定的,所以我想用IN.否则用i.ID = ?1 OR i.ID = ?2 OR ...应该就可以了.
    但是刚才在网上查,看到有人也在问这个问题,结果没有解决,还是在用上面OR的办法.
    那么是否这个问题跟EJB-QL本身有关系,目前就是不能那么用IN呢,请知道的高手说一下.如果就是不可以有什么别的办法可以达到同样的目的呢?
    非常感谢.
      

  2.   

    谢谢bon_jovi(西门疯雪)兄提醒.
    匆匆测试了一下得到了一个SQL error:
    "Illegal mix of collations (utf8_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation ' IN '"
    应该是字符问题,先解决这个问题然后才能测试IN的问题.
      

  3.   

    查了网上的一些文献发现EJB-QL好象的确是不支持这样实时动态加载query语句,但是JBoss支持,所以把EJB-QL改成JBOSS-QL后部署没有问题了.
    但测试的时候还是出现上面的错误:
    "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字符集.
    有碰到过这个问题的朋友能否来说说呢,或者我该把问题贴到数据库区.
    谢谢.
      

  4.   

    请问JBOSS-QL的语法那里可以找到。它和EJB-QL有什么不同地方嘛。
      

  5.   

    http://www.geocrawler.com/archives/3/10767/2002/2/50/7951388/
    这里有些简单说明。
    JBOSS-QL应该是EJB-QL的超集,支持ORDER BY,在IN,LIKE里可以用变量。只是这样可移植性就很差了。
      

  6.   

    试了很多次好象还是不能解决问题.
    尝试过用mysql的CONVERT(?1,"utf8")结果还是一样的.
    现在用xxx = ?1就没问题,用xxx IN (?1) 就出上面的问题.
    看来只好多写几个finder方法了,或者干脆用BMP的entity bean.
    哪位兄台能给点思路吗,谢谢.
    我要做下去了,不能停留在这个问题上了,晚上结贴吧.
    谢谢.
      

  7.   

    建议最好不用QL
    惨痛的教训:曾经在weblogic下写的ejb平移到websphere下,因为使用了QL,结果几乎都从写了。还有各家提供的QL语法不尽相同,没有统一的标准,给java一次编译随处运行大打折扣。比如上述的in语法据我所知目前QL不支持(至少在weblogic、websphere下),还有诸如order by的问题……
    放弃~~~
    自己写