我有一个问题,我有一个表有PersonID
(PID
)列的数量。型号JPA一对多没有实际的父实体
我想将这些实体挂起使用PID
作为外键使用JPA
一对多集合并使用EhCache进行高速缓存目的的父实体。
听起来很简单,麻烦的是我没有父母实体!我没有父母的原因是我们正在撰写报告申请,而我们正在使用PID
来写笔记。
我不是真的想创建一个新表,只是为JPA
和EhCache配置存储PID
。
我想知道我是否可以模仿一个实体或类似的东西,但对于所有的搜索我画空白。
我有一个问题,我有一个表有PersonID
(PID
)列的数量。型号JPA一对多没有实际的父实体
我想将这些实体挂起使用PID
作为外键使用JPA
一对多集合并使用EhCache进行高速缓存目的的父实体。
听起来很简单,麻烦的是我没有父母实体!我没有父母的原因是我们正在撰写报告申请,而我们正在使用PID
来写笔记。
我不是真的想创建一个新表,只是为JPA
和EhCache配置存储PID
。
我想知道我是否可以模仿一个实体或类似的东西,但对于所有的搜索我画空白。
没有'虚拟'实体或类似的东西,所以你不能单独在Hibernate中做你想要的。
我建议,虽然简单地做它的代码,在一个抽象层(DAO为Person
类,基本上)两个查询的顶部,这样的:
private static Person lookupPerson(Session s, int pid) {
List<Note> notes = s.createCriteria(Note.class).add(Restrictions.eq("pid", pid)).list();
List<Event> events = s.createCriteria(Event.class).add(Restrictions.eq("pid", pid)).list();
Person p = new Person(notes, events);
return p;
}
private static Person savePerson(Session s, Person p) {
for (Note note : p.getNotes()) {
s.saveOrUpdate(note);
}
for (Event event : p.getEvents()) {
s.saveOrUpdate(event);
}
}
谢谢Sharakan, 我想到了这种方法,但它不能帮助我缓存或添加到集合并获取数据的基本功能。 Simon – SimonF 2013-03-13 18:00:07
对于坚持数据,当然可以。只需将DAO的想法作为适配器扩展到多个查询即可。查看我更新的'savePerson'代码。对于ehcache,你将不得不更具体。你想要做什么与缓存? – sharakan 2013-03-13 18:18:03
在多用户环境中,这可能不太适用。如果两个用户在同一时间段内为同一个人更新两个不同的笔记,他们会覆盖另一个笔记。用Hibernate/Ehcache管理集合,这不成问题。我有一种感觉,为PID创建基本实体可能是最简单的解决方案。 – SimonF 2013-03-13 18:38:56
你能加样的一些例子你想运行的查询? – sharakan 2013-03-12 18:39:15
我希望能够拥有一组与每个PID相关的笔记和事件。 – SimonF 2013-03-13 14:18:14
因此,在一个查询中,获取包含对共享PID的所有Note实体和Event实体的引用的对象? – sharakan 2013-03-13 14:25:01