问题描述
一个类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