【问题标题】:how to assign different concurrency strategy to the same (persistence) entity?如何将不同的并发策略分配给同一个(持久性)实体?
【发布时间】:2012-05-09 00:07:15
【问题描述】:

我正在使用 JPA,并且我正在为所有引用实体使用二级缓存。 一切正常,我可以从二级缓存中获取实体,因为它们之前已经被选中了。

现在,我有两个应用程序,它们都使用相同的数据库(因此它们都使用相同的表、值等)。 1.只读应用程序只是从数据库中读取数据,它根本不修改数据库。因此,我为二级缓存选择了“READ_ONLY”并发策略,目的是为了更好的性能。 2.读写应用程序读写数据库数据,修改数据库。因此,我不得不为二级缓存选择“READ_WRITE”或“NONSTRICT_READ_WRITE”并发策略

但是,并发策略是在每个实体类的注释中分配的,所以我无法通过编程方式更改它。 (我不使用 JPA 的类映射文件,所以我不能使用两个映射文件,每个映射文件用于同一个实体类的不同并发策略。)

我的问题是,有没有什么好的方法可以根据我的 2 个不同的应用程序动态更改二级缓存的并发策略?

【问题讨论】:

    标签: java hibernate caching concurrency


    【解决方案1】:

    我没有使用过 Hibernate,但至少如果您使用 JPA,甚至可以使用部署描述符文件覆盖单个注释。您还应该能够使用部署描述符覆盖任何供应商特定的属性。

    很遗憾,我不能给你举个例子,但希望这对你有帮助。

    【讨论】:

    • 为什么是-1??您可以从 JPA 规范或 EJB3 中获得更多信息。我的回答应该可以帮助你前进。
    • 你好,tputKonen!你的回答真的给了我一个线索。我将在“如何使用部署描述符文件覆盖注释”上进行一些谷歌搜索。谢谢! -1 不是我做的……而且这是我第一次使用这个网站,所以我没有足够的声誉分数来弥补……我很抱歉。有事我会尽快回复你的。
    • 你好,tputKonen!部署描述符文件是指 orm.xml 吗?在 orm.xml 中,我可以添加不属于 JPA 规范的东西,比如“@org.hibernate.annotations.Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)”的等价物,这是一个休眠的东西.
    • 请检查persistence.xml 和称为属性的元素。如果您需要更多帮助,请告诉我,目前我没有时间查看更多信息,但如果您需要帮助,我会稍后再查看。另请下载 EJB3 持久性规范。
    • 谢谢你,tputKonen!我刚刚查看了 EJB3 持久性规范,我猜 JPA XML 描述符文件 (orm.xml) 是您提到的“部署描述符文件”。我认为有两种类型的 XML 元数据文件。一个是 Hibernate 映射文件,另一个是 JPA XML 描述符(orm.xml)。我认为 JPA XML 描述符不支持 Hibernate 供应商特定的注释(以及映射)。另一方面,你不能用 Hibernate XML 映射文件覆盖注解;您必须在 XML 中定义完整的实体类映射。
    【解决方案2】:

    因此,我认为目前的解决方案是将每个实体的所有注解替换为 Hibernate 映射文件,这样对于不同的部署(也包括应用程序),我们可以使用不同的 Hibernate 映射文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 2019-03-02
      相关资源
      最近更新 更多