遵循二八原則,80% 的業務場景不需要掌握 Hibernate 最複雜的 20% 特性(如複雜關聯映射)。實戰中發現:移除 mapping 文件中的 <set>、<list>、<map> 關聯定義,改用手工維護外鍵 ID,不僅簡化模型,還能讓團隊成員快速上手,項目交付效率顯著提升。
以 Org(1) : User(N) 為例,傳統做法配雙向一對多、級聯保存;極簡做法:
dao.save(org);
user.setOrgId("11"); // 手工設置外鍵
dao.save(user);
調研多個項目組,零關聯映射使用率,證明「關聯映射」往往是架構師的自我感動,而非業務剛需。
拋棄「一個 Service 對應一個 DAO」的傳統模式,構建通用 GenericDao:
public interface GenericDao {
List getObjects(String hql, Object... params);
void saveObject(Object entity);
void updateObject(Object entity);
void removeObject(Object entity);
}
Service 層直接調用通用方法:
public BeanValue saveItem(RequestMap rMap) {
BeanValue value = new BeanValue();
try {
AlexItem item = (AlexItem) BeanUtil.convertObject(AlexItem.class, rMap.getMap());
dao.saveObject(item); // 通用保存
value.addRequestMap("admin", item);
value.setForword("success");
} catch (BaseException e) {
value.addErrorMap("errorName", e);
value.setForword("error");
}
return value;
}
此模式適合中小型項目、外包項目、團隊流動性大的場景。大型核心系統若有極致性能調優需求,仍可局部引入精細映射。