zl程序教程

您现在的位置是:首页 >  其他

当前栏目

如何通过配置自动实现ValueList中hql语句的整型参数转换

转换配置自动 实现 如何 语句 参数 通过
2023-06-13 09:15:02 时间
通过valuelist的queryMap传递过来的参数默认都为string类型,在valuelist配置文件的hql中,如果直接将该值赋给整型的字段会报错。一般我们会在hql中利用转型函数来进行处理,如下:
复制代码代码如下:

<entrykey="areasInfoAdapter">
      <bean parent="abstractHibernate30Adapter">
                  <propertyname="defaultNumberPerPage"><value>19</value></property>
                    <propertyname="statementBuilder"><refbean="statementBuilderHql"/></property>
                     <propertyname="defaultSortColumn"><value>id</value></property>
                     <propertyname="defaultSortDirection"><value>desc</value></property>
                     <propertyname="hql">
                         <value>
                             fromcom.berheley.hcms.persistence.model.TBaseAreasastb
                             wheretb.status="1"
                              /~hId :andtb.hId =to_number{hId} ~/
                              /~oId :andtb.oId =to_number{oId} ~/
                              orderbytb.codeasc
                         </value>
                     </property>
                     <propertyname="defaultFocusPropertyObjectAlias"><value>vo</value></property>
                     <propertyname="maxRowsForFocus"><value>160000</value></property>           
                     <propertyname="removeEmptyStrings"><value>true</value></property>
                 </bean>
               </entry>

该方法比较麻烦,在所有的整型字段地方都需要添加函数处理,并且进行数据库迁移时会出现函数不兼容的问题。可以利用ValueList配置来对整型的字段进行统一设置,valuelist在拼装sql前会对配置好的参数进行转型。如下:
复制代码代码如下:

<beanid="integerSetterHql"class="net.mlw.vlh.adapter.hibernate3.util.setter.IntegerSetter"></bean>
 <beanid="statementBuilderHql"class="net.mlw.vlh.adapter.hibernate3.util.StatementBuilder">
   <propertyname="setters">
    <map>
     <entrykey="uId"><refbean="integerSetterHql"/></entry>
                                    <entrykey="oId"><refbean="integerSetterHql"/></entry>
    </map>
   </property>
  </bean>