阅读更多
目前在做hibernate的技术积累, 找了很多例子, 其中spring自带的jpetstore的代码结构是比较合理的,与大家讨论的DAO, DOMAIN等分层结构很一致.
但是这个例子是spring+iBatis做的, 我在往Hibernate迁移时产生了很多疑问, 请大家指点一下.
首先, 迁移的目标是仅修改DAO实现层, 不能修改DAO接口和域对象. 这样做的目的也是为了测试更换持久层的可能性和代价.在这个前提下用hibernate tools产生的PO类和HBM文件显然和已有的域对象结构存在很大出入, 我的解决方法是:
针对查询操作:
1. 对域对象, 再做一套查询用的PO和HBM(从多个实体PO里关联查询)
2. 对查询出来后的PO再用PropertyUtils.copyProperties把值拷贝到域对象里
3. 最后返回域对象
针对保存操作:
1. 把域对象的值拷贝到多个PO里
2. 分别保存每个PO
现在的疑惑是:
1. 原有的域对象结构非常简单, 而PO为了保持对象间关系, 结构复杂, 两者在做copy时需要大量手工转换, 对list结果集还要做循环转换, 这样做是否合理?有没有更好的方案
2. robbin曾提到Hibernate的PO就是非贫血的域模型, 那么PO是否能够直接拿来做域模型对象用? (这个又涉及了PO是否该传到view层的问题)
3. 为了整体简单, 能否所有PO不采用对象建模, 而是仅和表结构对应是否可行?
如主从表结构的PO里, 主表的PO属性里去掉对应子表的Set,由开发员自己编码来处理关联关系,
需要时调用子表的DAO检索数据.