Java 基于Bob叔叔的实体层JPA注释

Java 基于Bob叔叔的实体层JPA注释,java,jpa,design-patterns,architecture,Java,Jpa,Design Patterns,Architecture,根据,实体层应该对数据库一无所知 那么JPA注释呢?它们是否违反了作者提出的架构?如果有,如何将实体与JPA一起使用?在非ORM世界中,干净的体系结构将(或可能)涉及到拥有DAO接口,DAO实现知道如何从数据库(或任何其他源)检索数据,并将其转换为域对象并返回。然后,上层将使用DAO(通过接口)检索这些对象 例如,这将允许您为不同的数据库创建不同的DAO实现,并且您可以在不影响软件其余部分的情况下更改数据库 在JPA/ORM世界中,如果你愿意,你可以绕过很多。您可以使用实体类作为域对象,以与数据

根据,实体层应该对数据库一无所知


那么JPA注释呢?它们是否违反了作者提出的架构?如果有,如何将实体与JPA一起使用?

在非ORM世界中,干净的体系结构将(或可能)涉及到拥有DAO接口,DAO实现知道如何从数据库(或任何其他源)检索数据,并将其转换为域对象并返回。然后,上层将使用DAO(通过接口)检索这些对象

例如,这将允许您为不同的数据库创建不同的DAO实现,并且您可以在不影响软件其余部分的情况下更改数据库

在JPA/ORM世界中,如果你愿意,你可以绕过很多。您可以使用实体类作为域对象,以与数据库无关的方式创建实体类(例如,不使用任何特定于数据库的
nativequerys
)。既然您的实体与数据库无关,那么您可以在服务层中使用
namedquerys
,而不是创建DAO

最后,您需要有一些了解数据库的层,但在JPA的情况下,它甚至不成立。您的实体是Java对象,JPA实现层负责将它们与数据库进行转换

总之:软件开发中几乎没有什么普遍的真理,你可以和十几个叔叔交谈,听十几个版本的基本相同的“故事”