Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA双向关系与存储库/DAO使用_Java_Hibernate_Jpa_Repository - Fatal编程技术网

Java JPA双向关系与存储库/DAO使用

Java JPA双向关系与存储库/DAO使用,java,hibernate,jpa,repository,Java,Hibernate,Jpa,Repository,我一直在为这件事苦苦挣扎。我有一个包含30个实体的实体图。它们大多数是通过双向关系连接的。有些连接非常有用,有些则不然,因为它们只在实体之间删除时提供方便 此外,我还有用于创建/查找/存储实体的存储库。不幸的是,每个实体都有一个存储库,感觉就像这些存储库是我的对象图的窗口。这是一个推荐的实现吗 由于维护父/子关联的双向关系所导致的锅炉板代码,我有了替换一些双向关系并将其放入存储库的想法。其中一些关系仅与其他参数结合使用。让我们以经典的客户订单为例。我认为Customer->Order的方向并不总

我一直在为这件事苦苦挣扎。我有一个包含30个实体的实体图。它们大多数是通过双向关系连接的。有些连接非常有用,有些则不然,因为它们只在实体之间删除时提供方便

此外,我还有用于创建/查找/存储实体的存储库。不幸的是,每个实体都有一个存储库,感觉就像这些存储库是我的对象图的窗口。这是一个推荐的实现吗

由于维护父/子关联的双向关系所导致的锅炉板代码,我有了替换一些双向关系并将其放入存储库的想法。其中一些关系仅与其他参数结合使用。让我们以经典的客户订单为例。我认为Customer->Order的方向并不总是好的,因为有时需要将结果限制在特定的时间段内

我的问题是:你建议如何摆脱这场斗争?为了方便起见,您是否总是在大型项目中使用双向关系?或者用特定的存储库查询替换它们?为每个实体维护存储库可以吗


我被撕裂了一段时间…:-(

好吧,在我看来,如果不了解您的设置,很难说。您使用的是Spring
CrudePositories
、custom
Daos
还是EntityManager?也许这没什么区别,但我想知道

简言之,我非常高兴最近编写了一个应用程序,该应用程序有10个左右的优点,只有一个服务层。也许它可以帮助思考业务需求并开始构建新的服务层。尽管有30个左右的实体,但您可能只有少数几个业务观点。显然,客户和订单。还有,可能,付款,发货,退货

看看谁在使用该应用程序,以及他们如何称呼自己的部门。为该部门提供服务。为该部门的每一个需求打电话,即使你正在复制其他部门的一些代码。不要忘记IT部门。稍后,当你对这些服务的发展有了一个很好的了解时,你可以考虑一下co共同行动


希望这能有所帮助。

谢谢。事实上,我把最近学到的一些东西弄混了。在过去的几周里,我开始进行域驱动设计。不幸的是,由于性能问题,我在定义聚合时遇到了问题。例如,有一所大学有大约400门课程。因此,这所大学将是我的目标gate root和学习过程都是其中的实体。每次我需要处理对象时,都需要从数据库中加载它,我对性能的理解很恼火。因此,我决定使用存储库为每个实体创建聚合根。但这感觉不对,因为大多数实体共享双向关系因此,您可以从每个实体跳转到图中(在存储库的帮助下)(顺便说一句,类似于Spring版本的实现)并向各个方向导航。没有任何限制,这是感觉不正确的事情。因此,我认为DDD方法是正确的,但已经有一些开放性问题。设计通常有一些最艰难的决定。将部门视为域会有很大帮助。DAO或实体实际上只代表表。我经常创建每个部门特有的
视图
对象或DTO以及服务层。这样,我就拥有了对使用它们的部门有意义的对象。我的第一个业务应用程序采用了与我之前描述的相同的方法(每个实体的DAO/存储库).自从我处理DDD的事情以来,我对设计的想法发生了变化,但仍有一些旧的模式需要我忘却。顺便提一下,我对双向关系(JPA)有一个问题。通常这种关系需要在父母和孩子(=所有者)双方都保持。如果父端已被持久化,并且我将使用来自父端的引用(setParent)持久化子级在不通过addChildToParent更改父级的情况下,在离开无状态bean的事务边界后,子级将正确地保留在数据库中。是否可能由于最终驻留在内存中的未同步集合而发生问题?