【发布时间】:2022-10-06 15:45:38
【问题描述】:
我不是 JPA 专家。有时我必须修复旧代码中的错误:(
现在我有一个像
CREATE TABLE `station_zip` (
`ID` bigint(20),
`CREATED_AT` datetime,
`CREATED_AT_XML` datetime,
`MODIFIED_AT` datetime DEFAULT NULL,
`UPD_VERSION` bigint(20) DEFAULT NULL,
`ZIP_CODE` int(11) DEFAULT NULL,
`STATION_ID` int(11) DEFAULT NULL,
primary key (id)
)
JPA代码中的实体定义是:
@Cache(expiry = 300000, size = 10000) // 5 分钟
@Table(name = \"station_zip\")
@NamedQueries({
@NamedQuery(
name = StationZipBE.FIND_BY_ZIP_CODE,
query = \"select z from StationZipBE z where z.zipCode = :zipCode\")
})
public class StationZipBE {
...
}
访问代码是:
try {
final Query namedQuery = getEntityManager().createNamedQuery(StationZipBE.FIND_BY_ZIP_CODE);
namedQuery.setParameter(\"zipCode\", zipCode);
return (StationZipBE) namedQuery.getSingleResult();
}
catch (NoResultException e) {
...
}
问题是:
我开始查询第一个 ZIP 并获取正确的站 ID。
我开始查询另一个 ZIP(通过使用 setParameter),但没有得到正确的站 ID。我从第一个 ZIP 中获得了 ID。奇怪的!如果我设置缓存过期 = 1 查询工作是否正确?
这是一个缓存问题,我该如何解决?