日期:2014-05-19  浏览次数:20699 次

【求助】 我想拦截hibernate生成的sql语句

  hibernate orm

  Object ---》 sql ---》execute ----》 resultset -----》 Obeject

   

  我的意思就是在生成sql语句 且未进入数据库之前 把sql语句改变下


  请问有途径么?传授下、谢谢
 

------解决方案--------------------
你可以使用 Query.createSQLQuery 方法解决你需要的吧。。
------解决方案--------------------
看看官方文档吧http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/events.html
还有这篇http://www.iteye.com/topic/866142

主要就是继续EmptyInterceptor,重载onPrepareStatement(sql)方法
------解决方案--------------------
insert的參數不是你自己加進去的嗎?直接從你的實體中get出來。
------解决方案--------------------
想跟你说怎么做,又怕滥用害了你,还是算了吧。。。。。。
------解决方案--------------------
还是偷偷说吧,其实我觉得主要矛盾不是去破解“参数值”,所以我建议的思路是借助ThreadLocal:
——在准备SQL时,把需要的信息放入ThreadLocal;
——在onPrepareStatement时,取得所需要的信息,然后干你想干的事情。


警告:滥用ThreadLocal可能导致内存泄露等严重后果。
------解决方案--------------------
帮顶,没有好的解决办法。