`

博客向导

 
阅读更多

转载于 http://whb198900.blog.163.com/ 

 

Hibernate之映射文件配置——formula  

Property元素中的formula允许对象属性包含导出值,比如sum、average、max等的结果。如:

  1. <property name="averagePrice" formula="(select avg(pc.price) from PriceCatalogue pc, SelectedItems si where si.priceRefID=pc.priceID)"/>  

此外,formula还可以基于当前记录的特定属性值从另一个表检索值。例如:

代码
  1. <property name="currencyName" formula="(select cur.name from currency cur where cur.id= currencyID)"/>  
代码
  1. <property name="schNum" formula="(select max(a.schoolNumb) from sys_act_code as a)"/>  

注意:
1,formula="()",里面的是sql语句,字段和表名都应该和数据库相应,而不是字段,若带有参数如cur.id= currencyID,这个currencyID才是对象的东东.
2,formula="( sql )",这个括号不能少,不然会报错,我试了几次,没括号就报错,添上就没问题
3,操作字段一定要用别名

问题:
 1,org.springframework.orm.hibernate3.HibernateSystemException: Null value was assigned to a property of primitive type setter of
没用别名,会出现这个错误,添个别名就好了

2,如果我要用obj.getSchNum()得到想要的值,该对象(obj)必须是hibernate取得的对象,

3,如果要传入参数,如上面那个,currencyID是该对象的属性,它的值也是有hibernate操作当前对象时,把该属性对应的值自动传入进去.

 

---------------------------------------------

 

hibernate-formula-场景one  

2012-03-01 17:30:41|  分类: Hibernate |  标签: |字号 订阅

在一个项目的某一个查询场景中,TEACHER表是主表,STUDENT表是TEACHER的子表,两者是以一对多的方式关联。业务逻辑需要查询多 条TEACHER表的数据,并且在查询出每条A表数据的同时还需要将对应STUDENT表的行数取出来。我们当然可以利用Hibernate先将每条 TEACHER数据load进来以后再以TEACHER.getStudents().size()这种方式取得对应的行数,但是代码会显得很繁琐并且增 加了许多需要执行的SQL语句,有没有什么替代的方法呢?

 

我们可以使用Hiberante的formula。

 

为了解决前面提到的问题,我们只需要在TEACHER 的orm配置文件里加上这样一个property,定义其formula属性如下:

 

----------------------------

 

<property name="rowCount"

 formula="(select count(*) from student a where a.ID= teacherId)"
 
 type="java.lang.String" />


 

-----------------------------

通过这种方式我们就可以在取得每一个TEACHER持久化对象的时候就方便的得到了需要的统计信息,可以大幅度的提高我们的开发效率。注意这里不单单可以用来统计记数,还可以用于sum,avg等其他统计。

 

在Hibernate 3.x之前,formula属性只能够出现在property元素中。现在仍然可以这样做,但是Hibernate 3.x提供了一个formula属性或元素(两者在formula的用法方面实质上是等效的),可以在许多元素中使用,包括discriminator、 many-to-one、one-to-one、element、many-to-many、map-key、map-key-many-to-many 和property。这样就大大提高了对象关系映射的灵活性,从而支持对复杂数据 模型的更为细粒度的解释。

 

从3.x开始,Hibernate 使用formula、filter、subselect等提高映射灵活性,提供细粒度的解释特性,从而将其推进到一个新的级别。

分享到:
评论
1 楼 曾老师 2012-09-24  
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.surveypark.domain">
<class name="Survey" table="surveys">
<id name="id" column="id" type="integer">
<generator class="identity" />
</id>
<property name="title" column="title" type="string" length="50" />
<property name="preText" column="pretext" type="string" length="50" />
<property name="nextText" column="nexttext" type="string" length="50" />
<property name="exitText" column="exittext" type="string" length="50"  />
<property name="doneText" column="donetext" type="string" length="50"  />
<property name="logoPhotoPath" column="logophotopath" type="string" length="200" update="false" />
<property name="createTime" column="createtime" type="timestamp"  />
<property name="closed" column="closed" type="boolean" update="false"/>
<!-- 通过公式映射做大值,计算列 -->
<property name="maxOrderno" formula="(select max(p.orderno) from pages p where p.surveyid = id)" />
<property name="minOrderno" formula="(select min(p.orderno) from pages p where p.surveyid = id)" />

<!-- 映射从Survey到User之间多对一关联关系 -->
<many-to-one name="user" column="userid" class="User" />

<!-- 映射从Survey到Page之间一对多关联关系 -->
<set name="pages" inverse="true" order-by="orderno">
<key column="surveyid" />
<one-to-many class="Page" />
</set>
</class>
</hibernate-mapping>

相关推荐

    Android 向导页效果

    详细分析见博客:http://blog.csdn.net/u011183394/article/details/46762307 该demo实现了向导页的左右滑动,且在最后一个页卡显示跳转按钮,并只在第一次进入程序才跳转至向导页,否则直接进入主页

    Qt实例类向导ClassWizardExample

    这是一个Qt帮助文档中的一个示例,类向导,我的博客中有一些要注意的问题,是在Windows下用Qt5做的 博客地址:http://blog.csdn.net/solomon5926/article/details/8696912

    Android ViewPager向导页面制作方法

    接着上一篇博客,上一篇博客跟大家分享了三种开始页面的定时跳转,根据项目需求接下来就说一下向导页面吧!几乎每一个APP都有自己的向导页面,一般都是第一次安装的时或者第一次进入应用时才有向导页面的,就是只...

    NISedit向导脚本

    使用NISedit安装向导生成的脚本,大部分设置采用默认值,仅对不能通过编译的设置进行了修改。 该文档主要是用于作为《NSIS安装包》系列博客的示例。

    MFC 表单向导

    这是一个属性表单向导的例子,里面的内容很详细,对想要学习该控件的朋友会有很大帮助,另外我的博客里面有相应的总结,可以看一下 http://hi.baidu.com/_fsw871345432

    开源PHP博客平台OpenBlogv1.2.1

    OpenBlog是一个使用CodeIgniterPHP开发框架构建的开源博客平台。拥有:简洁和易于使用的界面。易于安装-OpenBlog提供安装向导让安装与配置变得非常简单。支持多种语言。支持通过模板更换外观,默认安装包含5种模板供...

    PJBlog4博客系统

    3.浏览器运行http://你的域名/install.asp,根据安装向导,填入相应信息(注意,这里放的目录是空间根目录,而不是你要安装的目录) 4.完成安装,开始PJBlog之旅! 温馨提示:系统默认账号admin,密码admin888 版本...

    fcontex开源博客系统 v1.0.4.zip

    fcontex博客系统安装向导:  本地安装 将src目录下的所有文件拷贝到IIS或Apache等WEB服务器的虚拟目录下,直接通过浏览器访问: http://localhost/install 按界面提示开始安装。   远程安装 将src目录下的...

    belog博客程序 v1.1

    web.xml中的62到71行注释掉,multipartResolver要放到boot中的配置文件中才行,否则上传出错,具体原因本人暂未知boot引导模式下,WEB-INF目录下面若没有install.lock文件,则会先引导安装向导程序,这时也方便测试...

    MyCms自媒体商城博客免费可商用源码

    MyCms自媒体内容管理系统是一款基于Laravel开发的开源免费的自媒体博客CMS系统,助力开发者知识技能变现。MyCms基于Apache2.0开源协议发布,免费且不限制商业使用。 系统功能 一、后台基础功能 1、权限管理 2、内容...

    幻彩博客(v12.3.1 水墨冰蓝作品).zip

    皮肤向导功能 单用户封面跳过功能 (7)2012-12-10发布2012.3.1版 修复首页网络图片的显示 首页远程图片大小控制 日志页栏目名称控制 修复日志不能翻页功能 修复连续字符串不能的BUG√(本BUG吙煋提供修正) ...

    fcontex博客系统 v1.0.4

    fcontex是开源的PHP博客系统,拥有漂亮的Web 2.0风格的后台界面和完全Ajax化的流畅操作体验,可用于快速构建中小型企业网站和个人博客(Blog)。fcontex是专为二次开发而设计的,主要体现在以下两点:1、基于完全...

    HFSS 过孔向导工具,可以轻松创建过孔模型

    HFSS官方的工具,可以轻松创造单过孔,差分过孔等模型。在做一些过孔优化的时候,使用非常方便。具体的使用方法可以参考我写的博客。

    向导博客课程

    Create React App入门 该项目是通过。 可用脚本 在项目目录中,可以运行: yarn start 在开发模式下运行应用程序。 打开在浏览器中查看。 如果进行编辑,页面将重新加载。 您还将在控制台中看到任何棉绒错误。...

    基于Laravel开发的开源免费的自媒体博客CMS系统

    MyCms是一款基于Laravel开发的开源免费的自媒体博客CMS系统,适用于个人自媒体及企业商城开发使用。同时亦可兼容微擎系统开发应用使用。 MyCms基于Apache2.0开源协议发布,免费且可商业使用(需保留前后台版权标识),...

    Blazor-Blogs:用Microsoft Server Side Blazor编写的简单博客应用程序

    产品特点支持无限的Blogger 带有图片上传功能的富文本编辑器用户管理和角色管理通过电子邮件验证和密码重置进行用户注册文件下载页面自定义隐私声明和使用条款动态标题和徽标博客文章的无限标签RSS订阅正在安装创建...

    UnaBoot博客系统-其他

    快速初始化:通过安装向导,快速完成站点初始化工作 标签化建站:尤娜内置了内容标签和内容函数,可以快速的完成模板的制作 多主题:支持多个主题自由切换,快速改变站点风格,而不需重新编译后台代码 Markdown支持:...

    优优博客系统 v1.5 bulid0823

    优优博客系统是一款开源的THinkphp5.0 的 Blog系统,其衍生于优秀的内容管理系统 易优cms 优优 Blog系统秉承了易优CMS的先进设计理念,并且专注于个人博客系统。 易优 Blog系统使用十分便

    第一个duilib工程示例 博客地址:https://gudianxiaoshuo.blog.csdn.net/article

    二、使用向导 生成windows桌面程序 1、 创建win32Project 2、组织结构 三、改造成DUILIB 1、清理代码 2、加入DUILIB 各种工程 3、修改输出目录 4、添加包含目录、lib目录 5、运行库 6、添加引用 四、代码...

    MyCms响应式个人博客资讯简洁模板 v1.0.zip

    MyCms自媒体内容管理系统是一款基于Laravel开发的开源免费的自媒体博客CMS系统,助力开发者知识技能变现。 MyCms基于Apache2.0开源协议发布,免费且不限制商业使用,欢迎持续关注我们。 一、模板页面 1、首页 2、...

Global site tag (gtag.js) - Google Analytics