栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用JPA将Map(java.util.Map)对象持久保存在实体中,并确保持久性级联?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用JPA将Map(java.util.Map)对象持久保存在实体中,并确保持久性级联?

我设法使用Java Ka
Baby的建议解决了这个问题。这个问题实际上不在我的

Model
课上;问题在于
Controller
。具体地说,我以错误的顺序保存了实体。一旦意识到使用
@ElementCollection
注释
Map<Long,Foo>
产生的效果与我手动指定的连接表相同,便尝试进行实验,重新思考如何保存实体。

在我上面发布的代码中,您可以在

FooSystem
构造函数中看到在持久化对象之前已放入两个
Foo
对象
f1
和。我意识到,如果将其放入地图中时不在数据库中,那么JPA如何将其ID用作联接表中的外键?
f2``fooMap``Foo``f1

如果您可以看到我要用这种推理方法前进的方向,那么您会发现显而易见的答案是,JPA 无法
完成使用外键引用不存在的键这一惊人的壮举。奇怪的是那出戏!控制台根本没有注意到我发布的原始代码有任何错误,即使它根本不正确。要么框架吞噬了

Exception
在此过程中抛出的所有错误,要么我编写了
产生的代码
Exception


因此,为解决此问题,我在对

Foo
实体执行任何操作之前将其保留。然后才把它们放进去
fooMap
。最后,一旦
fooMap
填充完毕,我便保留了该
FooSystem
实体。

这是更正的

TestController
类:

package controllers;import javax.persistence.EntityManager;import models.test.Foo;import models.test.FooSystem;import play.db.jpa.JPA;import play.mvc.Controller;public class TestController extends Controller{    public static void index() {        EntityManager em = JPA.em();        FooSystem fs = new FooSystem();        Foo f1 = new Foo(fs);        Foo f2 = new Foo(fs);        f1.save();        f2.save();        fs.put(f1.getId(), f1);        fs.put(f2.getId(), f2);        fs.save();        render();    }}

而且,由于我进行了更改

FooSystem
,因此这是该类的最终代码:

package models.test;import java.util.HashMap;import java.util.Map;import javax.persistence.ElementCollection;import javax.persistence.Entity;import play.db.jpa.Model;@Entitypublic class FooSystem extends Model{    @ElementCollection    private Map<Long, Foo> fooMap = new HashMap<Long, Foo>();    public FooSystem()    {    }    public Map<Long, Foo> getFooMap()    {        return fooMap;    }    public void put(Long l, Foo f)    {        fooMap.put(l, f);    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/428203.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号