hibernate 如何自关联

问题描述

一个类WatElectric有一个属性是fillDate,表示填写日期,class WatElectric{    private int id;    private Double income;    private Date fillDate;    // 省略getter和setter} 在hibernate中,现在要要知道这个月的收入 比上一年的同期(就是去年的同一个月)是增加还是减少。所以应该是一个自连接,不知道类应该怎么写, hbm.xml文件应该怎么写。还有hql语句怎么写呢。感觉应该是一对一, 因为每一个月只有一个去年的同月份, 但不知如何下手望各位能够回答我这个问题。。。

解决方案

感觉需求不是很明确啊1.填写日期是否报表日期?如果2月填写1月数据会否有问题?是否增加一个报表日期字段?2.是否一个月只有一张表?多张表的话是否有唯一性的组合查询约束?3.强烈建议不要使用自关联,面向对象设计时,同比统计不应该做关联,万一没有上一年同期的表呢?万一要统计上上一年呢?万一历史数据有删除呢?4.建议还是在程序端做代码,即使要sql也可以通过条件直接查询出来,而不是通过关联关系,比如select a.income, b.income from T a,T b where year(a.date)=2013 and month(a.date)=1 and year(b.date)=2012 and month(a.date)=1类似的,具体看你的数据库了
解决方案二:
你可以写一个存储过程把这个日期传过去,在存储过程中进行处理,可以还回一个数值,如果是正说明是增加,负数代表减少,要是数据量大的话,可以考虑在加索引,这样会好点。

时间: 2025-01-01 21:24:08

hibernate 如何自关联的相关文章

hbm-Hibernate 帅哥高手请进...关于Hibernate的三表关联,在线等...

问题描述 Hibernate 帅哥高手请进...关于Hibernate的三表关联,在线等... 表1: File (FID,Fname) 表2: UserGroup(GID,Gname) 表3: ActionPermissions(PID,Pname) 表4: File_Group_Permissions(ID,FID,GID,PID) 用四个表完成给某个文件指定用户组每个用户组指定权限,一文件对应多个用户组 每个用户组针对这个文件有不同的操作权限.Hibernate应该如何配置,表结构是否合理

hibernate多对多关联查询配置

问题描述 hibernate多对多关联查询配置 学生.课程.成绩三者 public class Student extends BaseModel { private static final long serialVersionUID = 1L; @Id @GenericGenerator(name = "idGenerator", strategy = "uuid") @GeneratedValue(generator = "idGenerator&q

Hibernate 多对多关联 中间表有多个字段如何配置

问题描述 例如 :学生 与课程之间是多对多关联,中间表不仅有学生表和课程表的主键,中间表还有其他字段(成绩等),该如何配置,用JPA如何设置,望大家指点指点| 解决方案 一个事例:LoginInfo.hbm.xml<hibernate-mapping><class name="com.ucit.ca.webApp.po.LoginInfo" table="CAS_USER_MODULE_INFO"><id name="lid&

Hibernate中通过关联映射取得结果集对结果进行排序、分页的方法

问题描述 在Hibernate中通过关联映射, 例如OneToMany等取得一个实体的属性结果集时有没有办法对结果进行排序或者分页. 直接通过HQL或者SQL可以直接利用HQLSQL进行排序分页等操作, 但是如果这类关联映射不支持这些操作那么关联映射的作用感觉也不是很大了. 例如一个User实体有一个Set<Logs>属性, 即一个用户有N多操作日志,OneToMany的, 那么如果通过User.getLogs()取得的结果集将是全部查询··· 解决方案 作为属性,分页应该不行.排序可以: @

Hibernate多对多关联映射的HQL中的in条件查询问题

群里有朋友求解一个问题,高分求一条HQL多对多查询语句 . 问题描述见 http://topic.csdn.net/u/20090621/16/4eac6fe0-bf3e-422e-a697-f7584732f66e.html, 摘要如下: 一个学科表(Field),一个用户表(User),多对多关系. 学科表有两个字段,id和descripiton,用户表有众多字段,不罗列了 Field中有SET集合users User中有SET集合fields 现在要查掌握id like '520%'的女性

Hibernate中双向关联加载排序的解决方案

问题:Hibernate的<many-to-many>双向关联中,一方加载另一方时,怎么样达到按自定义规则排序的目的呢? 实例:角色和菜单是多对多的关系,为角色分配菜单后,加载菜单时,我需要按照菜单的ID来排序显示. 解决办法: 1. 通过在hbm配置文件中配置解决,需要自定义比较器. 1) 在多对多的主控端指定sort属性 这里的主控端为role,受控端为menu. role的配置为: <set name="roleMenus" table="ROLE_M

系统学习hibernate之四 hibernate多对一关联映射

一.关联映射的本质: * 将关联关系映射到数据库,所谓的关联关系是对象模型在内存中的一个或多个引用 <many-to-one>会在多的一端加入一个外键,指向一的一端,这个外键是由<many-to-one> 中的column属性定义的,如果忽略了这个属性那么默认的外键与实体的属性一致 <many-to-one>标签的定义示例: * <many-to-one name="group" column="groupid"/>

hibernate一对一双向关联的cascade问题

问题描述 一张Admin表,一张AdminInfo表Admin表publicclassAdminimplementsjava.io.Serializable{/*Id*/@Id@GenericGenerator(name="systemUUID",strategy="uuid")@GeneratedValue(generator="systemUUID")privateStringadminId;/*姓名*/@Column(nullable=fa

读取hibernate实体类关联的表名以及列名(注解方式)

问题描述 因为工作需要出现了这样的一个需求,某记录需要拷贝一条,以某条记录或某些记录为基础,只需要更改主键值(id)例如这样的语句:insert into table1 (id,field1,field2)select @id,field1,field2 where id = 1;以上以id为1的记录拷贝.由于我现在的语句拷贝可能比较多,而且实体类涉及到clob字段,所以hibernate效率可能会比较低.所以想使用sql语句,但是如果是写明了所有字段的sql语句就会造成以后有人更改了表结构这块

关于基于Hibernate留言板的疑惑,hibernate自动获取关联对象的问题

问题描述 只有用户,和留言两个表,POJO如下: public class Article {private Integer id;private String title;private String content;private User user; //省略setter,getter}  public class User {private Integer id;private String username;private String password;private Set<Art