【发布时间】:2011-11-23 04:30:20
【问题描述】:
我最近开始玩 Play! Java 框架,版本 1.2.3(最新)。在测试框架时,我在尝试在名为 FooSystem 的 Hibernate 实体中保留 Map 对象时遇到了一个奇怪的问题。 Map 对象将 long 映射到我称为 Foo 的 Hibernate 实体,声明为 Map<Long, Foo> fooMap;
我的问题如下:创建了正确的表,因为我已经注释了它们。但是,当FooSystem对象fs被持久化后,fs.fooMap中的数据就没有了!
这是我用于实体的代码。首先是Foo:
package models.test;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import play.db.jpa.Model;
@Entity
public class Foo extends Model
{
@ManyToOne
private FooSystem foosystem;
public Foo(FooSystem foosystem)
{
this.foosystem = foosystem;
}
}
这里是FooSystem:
package models.test;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import play.db.jpa.Model;
@Entity
public class FooSystem extends Model
{
@ManyToMany(cascade = {CascadeType.ALL, CascadeType.PERSIST})
@JoinTable(
name = "fooMap",
joinColumns = @JoinColumn(name = "foosystem"),
inverseJoinColumns = @JoinColumn(name = "foo")
)
private Map<Long, Foo> fooMap = new HashMap<Long, Foo>();
public FooSystem()
{
Foo f1 = new Foo(this);
Foo f2 = new Foo(this);
fooMap.put(f1.getId(), f1);
fooMap.put(f2.getId(), f2);
}
public Map<Long, Foo> getFooMap()
{
return fooMap;
}
}
这是我用来测试我的设置的Controller 类:
package controllers;
import javax.persistence.EntityManager;
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();
em.persist(fs);
render();
}
}
戏剧!框架自动为 HTTP 请求创建了一个事务。尽管数据被插入到foo 和foosystem 表中,但没有任何东西被插入到foomap 表中,这是期望的结果。我能做些什么呢?我错过了什么?
【问题讨论】:
-
您使用的是什么版本的 JPA。JPA2 有 '@ElementCollection' 执行此操作 download.oracle.com/javaee/6/api/javax/persistence/…
-
事实上,我正在使用 JPA2。我尝试了您的建议,在对保存实体的顺序进行了一些调整后,它起作用了!我将在接下来的 24 小时内发布完整的解决方案!我住的地方已经很晚了,我需要睡觉。谢谢您的帮助!在搜索我的问题时,我在 Internet 其他地方看到了
@ElementCollection注释,但是在我第一次尝试时使用@ElementCollection并没有工作。直到现在我才把它写下来。谢谢!
标签: java hibernate jpa map playframework