Hibernate 从两个不同的应用程序(读/写和只读)访问同一数据库

Hibernate 从两个不同的应用程序(读/写和只读)访问同一数据库,hibernate,spring,jpa,ehcache,Hibernate,Spring,Jpa,Ehcache,我知道有很多关于这方面的文档,但我对这一论点完全是新手,我想就此提出一些简单的建议。 我正在与SpringHibernate和jpa合作。我将在同一台服务器上有两个不同的应用程序。它们都与同一个数据库通信,但一个只是读取,另一个是读写。 哪种方式是最好的支付方式?看起来,我明白像EHCache这样的二级缓存是必要的,但有些愚蠢的事情我不明白。例如,我应该在两个应用程序中创建完全相同的实体吗?只读应用程序如何将其实体与另一个应用程序创建的实体相关联?我只会创建两个用户,其中一个只有DB引擎支持的读

我知道有很多关于这方面的文档,但我对这一论点完全是新手,我想就此提出一些简单的建议。 我正在与SpringHibernate和jpa合作。我将在同一台服务器上有两个不同的应用程序。它们都与同一个数据库通信,但一个只是读取,另一个是读写。
哪种方式是最好的支付方式?看起来,我明白像EHCache这样的二级缓存是必要的,但有些愚蠢的事情我不明白。例如,我应该在两个应用程序中创建完全相同的实体吗?只读应用程序如何将其实体与另一个应用程序创建的实体相关联?

我只会创建两个用户,其中一个只有DB引擎支持的读访问权限。

我只会创建两个用户,其中一个只有DB引擎支持的读访问权限。

,以下是对你的问题的一些评论

理论上,您根本不需要将相同的Java类映射到数据库表。您可以创建不同的集合并对它们进行注释,以便两个集合都映射到相同的表。尽管如此,这不是一个很好的做法。您应该做的是有一个数据访问模块,其中您将一组JPA实体bean映射到表,以及允许您对这些CRUD执行基本操作的类,然后在两个项目中的每个项目中都有单独的服务类,它们使用数据访问模块类来实现特定的业务逻辑

由于有两个应用程序访问同一个数据库,因此将处理两个单独的JPA上下文,它们将分别刷新和同步。因此,如果不确保每次需要手动刷新修改,可能会出现一些数据不一致。如果在它上面使用二级缓存(如EHCache),这可能是一个更大的问题。但是,在您当前的设置中,只有读写的应用程序才应该遵守这些限制,而另一个应用程序(只读的应用程序)可以使用二级缓存来加速其操作。只需确保所述缓存已刷新/过期,以便在第一个应用程序写入所需数据时获得所需数据,即,如果您经常写入,您的缓存也应经常过期。如果每月写入一次,则可以在只读应用程序的二级缓存上配置更长的过期时间


好的,这里有一些关于你的问题的评论

理论上,您根本不需要将相同的Java类映射到数据库表。您可以创建不同的集合并对它们进行注释,以便两个集合都映射到相同的表。尽管如此,这不是一个很好的做法。您应该做的是有一个数据访问模块,其中您将一组JPA实体bean映射到表,以及允许您对这些CRUD执行基本操作的类,然后在两个项目中的每个项目中都有单独的服务类,它们使用数据访问模块类来实现特定的业务逻辑

由于有两个应用程序访问同一个数据库,因此将处理两个单独的JPA上下文,它们将分别刷新和同步。因此,如果不确保每次需要手动刷新修改,可能会出现一些数据不一致。如果在它上面使用二级缓存(如EHCache),这可能是一个更大的问题。但是,在您当前的设置中,只有读写的应用程序才应该遵守这些限制,而另一个应用程序(只读的应用程序)可以使用二级缓存来加速其操作。只需确保所述缓存已刷新/过期,以便在第一个应用程序写入所需数据时获得所需数据,即,如果您经常写入,您的缓存也应经常过期。如果每月写入一次,则可以在只读应用程序的二级缓存上配置更长的过期时间