JPA 缓存

我沉迷于JPA的缓存。
因为我不明白它是如何工作的。

现象

  1. Web 应用程序中的数据引用
  2. 其他进程删除对应数据
  3. 在 Web 应用程序中再次引用相同的数据
    • 即使没有数据也可以参考

如果您将其视为缓存,那是很自然的。

原因

  • JPA (EclipseLink) 有 L1 缓存和 L2 缓存,默认启用。
    • L1缓存似乎是在同一个线程中缓存
    • 好像L2缓存是同一个JVM中的缓存

环境

  • JavaEE7
    • JPA
      • EclipseLink

措施

  • 我已经谈到了性能,但我禁用了缓存。

    • 默认情况下是禁用的,并且似乎可以使用annotation缓存 Entity 。
      • 参考主机是缓存吗?
  • persistance.xml

<persistence ..>
    <persistance-unit ...>

        <shared-cache-mode>NONE</shared-cache-mode> 

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="com.example_jpawebtomcat_war_1.0-SNAPSHOTPU" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>com.example.jpawebtomcat.Books</class>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <shared-cache-mode>NONE</shared-cache-mode>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/db?autoReconnect=true&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.password" value="root"/>
        </properties>
    </persistence-unit>
</persistence>

参考URL

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值