继承在开发中的使用
前段时间,红帽公司的高级架构师来公司培训了hibernate的高级应用,因为本人是做前台转到做后台的,所有好多东西是云里雾里的。当时老师讲到领域模型设计以及hibernate的继承的使用,刚开始并没理解对象继承的作用,感觉继承也减少不了多少工作量。而且hibernate的延迟加载还不支持 向下转型 和instanceof 以为这东西在我实际开发中使用价值不大。但最近的一个项目,我试着使用领域模型进行设计并且在实施中发现了许多好处。
任务计划需求:任务计划分个人任务:也就是私人任务;定期性任务:就是固定时间要做的一些任务,比如上传报表之类的任务.;工作任务:就是上级指派给下级需要完成的任务。
这三种任务在不同的界面进行增加,但需要在一个界面进行展示,也就是现在业界比较流行的日视图,周视图,月视图之类的。这种情况采用继承就比较方便
任务计划的对象xml为
select task0_.TASK_ID as TASK1_21_0_, task0_.UPDATE_BY as UPDATE2_21_0_, task0_.UPDATE_TIME as UPDATE3_21_0_, task0_.ARCHIVE_FLAG as ARCHIVE4_21_0_, task0_.ACCREDIT_ROLE_NAME as ACCREDIT5_21_0_, task0_.ACCREDIT_ROLE_ID as ACCREDIT6_21_0_, task0_.ACCREDIT_ORG_ID as ACCREDIT7_21_0_, task0_.ACCREDIT_ORG_NAME as ACCREDIT8_21_0_, task0_.ACCREDIT_USER_ID as ACCREDIT9_21_0_, task0_.ACCREDIT_USER_NAME as ACCREDIT10_21_0_, task0_.START_TIME as START11_21_0_, task0_.END_TIME as END12_21_0_, task0_.TASK_TYPE as TASK13_21_0_, task0_.AWOKE_TIME as AWOKE14_21_0_, task0_.TASK_CONTENT as TASK15_21_0_, task0_.TASK_TITLE as TASK16_21_0_, task0_.TASK_STATE as TASK17_21_0_, task0_.INNER_NOTE as INNER18_21_0_, task0_.ISSUANCE_NAME as ISSUANCE19_21_0_, task0_.ISSUANCE_ID as ISSUANCE20_21_0_, task0_.clazz_ as clazz_0_ from ( select ACCREDIT_ROLE_NAME, INNER_NOTE, TASK_CONTENT, ACCREDIT_ORG_NAME, AWOKE_TIME, TASK_ID, TASK_TYPE, ACCREDIT_ROLE_ID, ACCREDIT_USER_NAME, UPDATE_BY, TASK_STATE, UPDATE_TIME, END_TIME, ACCREDIT_ORG_ID, ISSUANCE_ID, TASK_TITLE, START_TIME, ISSUANCE_NAME, ARCHIVE_FLAG, ACCREDIT_USER_ID, 1 as clazz_ from OA_INDIVIDUAL_TASK union select ACCREDIT_ROLE_NAME, INNER_NOTE, TASK_CONTENT, ACCREDIT_ORG_NAME, AWOKE_TIME, TASK_ID, TASK_TYPE, ACCREDIT_ROLE_ID, ACCREDIT_USER_NAME, UPDATE_BY, TASK_STATE, UPDATE_TIME, END_TIME, ACCREDIT_ORG_ID, ISSUANCE_ID, TASK_TITLE, START_TIME, ISSUANCE_NAME, ARCHIVE_FLAG, ACCREDIT_USER_ID, 2 as clazz_ from OA_PERIOD_TASK union select ACCREDIT_ROLE_NAME, INNER_NOTE, TASK_CONTENT, ACCREDIT_ORG_NAME, AWOKE_TIME, TASK_ID, TASK_TYPE, ACCREDIT_ROLE_ID, ACCREDIT_USER_NAME, UPDATE_BY, TASK_STATE, UPDATE_TIME, END_TIME, ACCREDIT_ORG_ID, ISSUANCE_ID, TASK_TITLE, START_TIME, ISSUANCE_NAME, ARCHIVE_FLAG, ACCREDIT_USER_ID, 3 as clazz_ from OA_WORK_TASK ) task0_ where task0_.TASK_ID=?