Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JPA时如何正确缓存公共对象/实体?_Java_Jpa_Openjpa - Fatal编程技术网

Java 使用JPA时如何正确缓存公共对象/实体?

Java 使用JPA时如何正确缓存公共对象/实体?,java,jpa,openjpa,Java,Jpa,Openjpa,我有一个web应用程序,它需要从数据库中的表中加载一些行作为对象,这些行将在应用程序中的各个位置重复使用 例如,我可能检索一个不经常更改的位置列表,因此我希望将这些位置存储在内存中,以便以后更快地访问 接下来,在未来的请求中,我想将这些实体中的一个与数据库中的另一个实体相关联;但是,JPA在尝试保存时会抛出错误,因为缓存的实体已分离 如何重新附加缓存的实体,以便将其包含在当前事务中 我正在使用Apache OpenJPA实现。调用EntityManager.merge()将重新附加分离的对象 看

我有一个web应用程序,它需要从数据库中的表中加载一些行作为对象,这些行将在应用程序中的各个位置重复使用

例如,我可能检索一个不经常更改的位置列表,因此我希望将这些位置存储在内存中,以便以后更快地访问

接下来,在未来的请求中,我想将这些实体中的一个与数据库中的另一个实体相关联;但是,JPA在尝试保存时会抛出错误,因为缓存的实体已分离

如何重新附加缓存的实体,以便将其包含在当前事务中


我正在使用Apache OpenJPA实现。

调用
EntityManager.merge()
将重新附加分离的对象


看看这个信息丰富的

当我这样做时,它似乎不喜欢对象有一个“ID”值。在我的实体上,ID是PK,并具有@GeneratedValue注释。错误为:
实例生命周期处于PNewState状态,因此不允许标识字段存在非默认值。您需要删除@GeneratedValue注释或修改代码以删除初始值设定项处理。
将ID设置为0会清除错误,但会为此实体生成一条新记录,我不希望这样。现有记录需要关联。