正如我所理解的MVC,模型的逻辑也应该进入模型本身 - 使每个对象成为一个独立的实体。这意味着类的方法必须具有触发器和动作链。例如,通过在Person类中使用setZipCode(zip),可以触发一个操作,在该操作中,它将邮政编码从zip到城市表中查找,然后将setCity(city)设置为相同。使用JPA时实现MVC
这一切似乎都很好,但是当你将一些JPA实现插入图片时会发生什么?正如我所看到的,类的setter和getter必须清除所有额外的逻辑,因为JPA实现使用这些来构建对象。因此你不能在setZipCode中调用setCity。我们已经解决了这个问题,通过将所有特定于模型的逻辑移动到控制器层来处理这个项目。在这种情况下,不是直接调用Person,而是调用PersonController.setAddressInfo(zip)来处理两者,或者类似的东西。也许更好的选择是在实体本身内部具有瞬态函数。
所以,这里是我的问题:我有没有在MVC或JPA的原理中遗漏一些基本知识,或者不能在使用ORM层时完全实现MVC?如果泛型setter和getter对于JPA是私有的并且这些类将为开发人员提供单独的公共,临时API,那么它会更好吗? (由于某种原因,Hibernate似乎并不介意访问私有方法。)
在项目中使用Hibernate的JPA实现中,我的同事在另一个项目中使用了EclipseLink,并且我一直在阅读关于OpenJPA的一些信息最近。