Hibernate4 升级到Hibernate5 中 sql查询注意事项

Hibernate4中,利用原生SQL语句查询时,
1、可使用Session.createSQLQuery(sql)建立Qurey(org.hibernate.Query),
2、可使用Query.setParameter(int index, Object obj),对sql语句中的参数根据位置进行参数值动态绑定;

升级到Hibernate5
1、org.hibernate.Query被标记为@Deprecated
2、Session().createSQLQuery(sql)返回类型为org.hibernate.query.Query;
3、并且Session().createSQLQuery也已经被标记为@Deprecated;
4、可使用Session().createNativeQuery(sql)代替createSQLQuery。
5、createNativeQuery返回的Query,不可通过setParameter(int index, Object obj) 根据位置进行参数值动态绑定;只可以通过setParameter(String paramname, Object obj) 按参数名称绑定
6、createNativeQuery(sql)中的sql语句中的查询占位符
只可使用命名参数方式进行编写。

//正确例子:
Query query=session.createNativeQuery(“from User user where user.name=:name ”); 
query.setParameter(name,“A”); 

//错误例子:
Query query=session.createNativeQuery(“from User user where user.name=? ”); 
query.setParameter(0,“A”); 

上问错误例子中,将导致如下错误:

Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: Unknown parameter position: 0
    at org.hibernate.query.internal.QueryParameterBindingsImpl.getBinding(QueryParameterBindingsImpl.java:223)
    at org.hibernate.query.internal.AbstractProducedQuery.setParameter(AbstractProducedQuery.java:499)
    at org.hibernate.query.internal.NativeQueryImpl.setParameter(NativeQueryImpl.java:588)
    at org.hibernate.query.internal.NativeQueryImpl.setParameter(NativeQueryImpl.java:52)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。