hibernate的formula的低级使用
hibernate的formula的初级使用实体类的一个属性可以对应数据库表里的多个列,这个属性的值由formula 获得p
hibernate的formula的初级使用
实体类的一个属性可以对应数据库表里的多个列,这个属性的值由formula 获得<property?formula="。。。"?name="topicCount"/>
?? 以前片面的理解为sql语句必须写在()里,如下面
<property?name="rank"?formula="(select?count(*)?from score?s?where?s.student_score>student_score)"/>
?? 举个例子说明formula真正的用法,假设user表里面有first_name和last_name属性。在映射的vo里面指定了name属性用于表示两个字段合起来的字符串,使用formula实现如下(数据库用的mysql)
<property?name="name"?formula="concat(first_name,last_name)"/>
?? 假设我们获取了一个id为1的vo实例,那么hibernate就是执行如下sql语句用于取得name的值
select?concat(first_name,?last_name)?from?user?where?id=1;
?? 这下子对于formula里的sql语句为什么必须放在括号里应该明白了,因为formula里面的值会作为一条sql语句select和from之间的内容,我们把sql语句放到括号里实际上就是做为一条子查询执行!!! 例如最开始示例的的rank对应的sql语句就应如下样子
select?(select?count(*)?from?score?s?where?s.score>sc.score)?from score sc where sc.id=1;