从ibatis转向hibernate后发现hibernate有很多地方实在是无赖,可能是学艺不精!
我有这样个需求:
select * from A left join B on A.id=b.id and b.id='需要动态传入' order by B.id asc在ibatis实现非常简单,hibernate应为没有on关键字,对如果这个查询做不了的话,是不是对sql支持过于简单? 那他的优势在哪?只是不是限了解sql的初学者使用方便吗? 望请指教!
我有这样个需求:
select * from A left join B on A.id=b.id and b.id='需要动态传入' order by B.id asc在ibatis实现非常简单,hibernate应为没有on关键字,对如果这个查询做不了的话,是不是对sql支持过于简单? 那他的优势在哪?只是不是限了解sql的初学者使用方便吗? 望请指教!
这个我知道,但它的关联后只能对关联的那个字段动态生成sql。但我要干预生成的sql后的那个on的条件,如我需求中所说的我要动态干预 (on A.id=b.id and b.id='需要动态传入' ),看了之后没有找到合适的解决方法,
由于有分页的包装类所以不能使用查询结果中增加伪列的做法。需求:
select * from A left join B on A.id=b.id and b.id='需要动态传入' order by B.id asc
用户编写hql,hibernate根据配置文件中指定的数据库类型转换成sql,
然后如果你更换了数据库,只需要改一下配置文件中的数据库url以及驱动类名就可以了
不必重新写sql,利于开发和维护当然你要是觉得hql里没有on不方便,一定想用sql的话,hibernate也支持原生态查询,
使用session.createSQLQuery(sql)即可
新手上路,目前理解hql无法实现 *** left join B on B.1=A.1 and B.1='?'的语法。
这个我知道,但问题是这样我需要重新写个分页工具,目前分页工具无法支持。我也很无赖,没着只能走重写个了。“hibernate是为了跨平台方便”这个倒是真的,不过项目启动后数据库是不会变的,所谓换数据库都是小项目到处换的那种,我们项目是定制的。
用where条件过滤不是一样的吗
hibernate我用的时候觉得挺爽的
这个效果就不对了,你可以实现俩种写法的效果。这样写的话结果where后的就是内关联,不能把A表数据全列出后,把B表符合的数据接到A表后面了。
但是要达到外连接的目的方法很多,
hql 有outer join字
也可以sql: where A.id = b.id(+)
就算非用 Criteria不可,
也可以createCriteria(A.class).createCriteria(集合名,名)
.setFetchMode(xx,FetchMode.xx)设置抓取策略,设置为外连接,
并且还可以在后面接你那个动态参数,用Restrictions加查询参数,都可以
from A left join B b and b.id='需要动态传入' order by B.id asc