Недавно я начал играть с Play! Framework для Java, версия 1.2.3 (последняя). В процессе тестирования фреймворка я столкнулся со странной проблемой при попытке сохранить объект Map
внутри сущности Hibernate под названием FooSystem
. Объект Map отображает long на сущность Hibernate, которую я назвал Foo
, с объявлением Map
Моя проблема заключается в следующем: Правильные таблицы создаются так, как я их аннотировал. Однако, когда объект 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();
}
}
Фреймворк Play! автоматически создал транзакцию для HTTP запроса. Хотя данные вставляются в таблицы foo
и foosystem
, в таблицу foomap
ничего не вставляется, что является желаемым результатом. Что я могу с этим сделать? Что я упускаю?