我了解将数据层对象(DAO)分离到其自己的层中,从而从[DAO和Service层(JPA / Hibernate +Spring)中概述的服务和业务层中抽象出数据访问逻辑和数据源细节以及其他问题。我具有创建这些层的经验,但是我一直使用原始JDBC或类似的与数据库的较低层接口(例如Spring的SimpleJDBC),并且是Hibernate的新手。
我的问题是,以原始JDBC或其他方式实际上在数据访问层处理结果集(或围绕它的薄包装)时,将数据粘贴到其中的结果POJO非常干净,不知道在哪里数据来自哪里,我从不担心将这些数据返回到服务层以及其他地方。但是似乎在Hibernate中,您可以在POJO批注中拥有很多特定于Hibernate /数据结构的逻辑(诸如1到许多映射,延迟加载首选项等)。我感到不舒服,它们从我的DAO一直返回到我的服务层(或它们的集合),并试图让所有POJO实现我传递回来的接口。这是好的做法,还是过于复杂?
注释具有将某些框架知识与Java对象耦合的一个缺点。这就是您没有单独的元数据定义所要付出的代价。但是,POJO仍然是POJO,从实际的角度来看,我没有充分的理由仅仅因为注释而使设计复杂化。
让我们考虑一下,如果您将使用XML映射,您是否还会担心?最有可能-不会。因此,支付罚款并继续前进;并且在不太可能的情况下,如果您要更改持久性框架- 您将继续删除这些注释。在所有情况下,它们都不应对DAO层之外的代码产生任何副作用。
只是我的2美分…