我沉迷于JPA的缓存。
因为我不明白它是如何工作的。
现象
- Web 应用程序中的数据引用
- 其他进程删除对应数据
- 在 Web 应用程序中再次引用相同的数据
- 即使没有数据也可以参考
如果您将其视为缓存,那是很自然的。
原因
环境
- JavaEE7
- JPA
- EclipseLink
- JPA
措施
-
我已经谈到了性能,但我禁用了缓存。
- 默认情况下是禁用的,并且似乎可以使用annotation缓存 Entity 。
- 参考主机是缓存吗?
- 默认情况下是禁用的,并且似乎可以使用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&useSSL=false&useUnicode=true&characterEncoding=UTF-8&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>