2013-03-12 67 views
2

我有一个问题,我有一个表有PersonIDPID)列的数量。型号JPA一对多没有实际的父实体

我想将这些实体挂起使用PID作为外键使用JPA一对多集合并使用EhCache进行高速缓存目的的父实体。

听起来很简单,麻烦的是我没有父母实体!我没有父母的原因是我们正在撰写报告申请,而我们正在使用PID来写笔记。

我不是真的想创建一个新表,只是为JPA和EhCache配置存储PID

我想知道我是否可以模仿一个实体或类似的东西,但对于所有的搜索我画空白。

+0

你能加样的一些例子你想运行的查询? – sharakan 2013-03-12 18:39:15

+0

我希望能够拥有一组与每个PID相关的笔记和事件。 – SimonF 2013-03-13 14:18:14

+0

因此,在一个查询中,获取包含对共享PID的所有Note实体和Event实体的引用的对象? – sharakan 2013-03-13 14:25:01

回答

0

没有'虚拟'实体或类似的东西,所以你不能单独在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); 
    } 
} 
+0

谢谢Sharakan, 我想到了这种方法,但它不能帮助我缓存或添加到集合并获取数据的基本功能。 Simon – SimonF 2013-03-13 18:00:07

+0

对于坚持数据,当然可以。只需将DAO的想法作为适配器扩展到多个查询即可。查看我更新的'savePerson'代码。对于ehcache,你将不得不更具体。你想要做什么与缓存? – sharakan 2013-03-13 18:18:03

+0

在多用户环境中,这可能不太适用。如果两个用户在同一时间段内为同一个人更新两个不同的笔记,他们会覆盖另一个笔记。用Hibernate/Ehcache管理集合,这不成问题。我有一种感觉,为PID创建基本实体可能是最简单的解决方案。 – SimonF 2013-03-13 18:38:56