如何仅获取与JPA中的其他2个表具有@OneToMany关系的父记录

时间:2015-06-18 12:49:22

标签: java mysql hibernate jpa

我有3个实体 1.)清单 2.)任务 3.)过程

@OneToMany(mappedBy="checklist", cascade=CascadeType.PERSIST , fetch = FetchType.LAZY)
private List<taskEntity> tasks;

@OneToOne(mappedBy="checklist", cascade=CascadeType.PERSIST, fetch = FetchType.LAZY)
private processEntity process;

在检索期间,我使用了

@NamedNativeQuery(name="checklistEntity.selectAll", query="SELECT * FROM CHECKLIST", resultClass=checklistEntity.class)

但输出也包含子表记录。

2 个答案:

答案 0 :(得分:1)

使用JPQL:

select c from checklistEntity c where class = checklistEntity

PS Java中的一般约定是类名应以大写字母开头。

答案 1 :(得分:1)

可能没有。

您是否看到了hibernate(我想...)日志,并看到这两个表是否正在获取?

对于那些@OneToMany关系,你说你想要一个LAZY fetch。 如果你有像这样的对象,这意味着是的

Checklist() {
    List<Task> tasks .....
    Process process....
    ....
}

你可以一直做checklist.getTasks()...并获得所有值,但这并不意味着这些值是用checklistEntity.selectAll获取的。

据我所知,你的代码只能获取Checklists和实时空白的地方,应该是任务和进程,并在你要求时获取它们......当你在Checklist中为一个或另一个属性调用getter时。

示例:

  checklistEntity.selectAll
  Checklist c = // one of those Checklist fetch with this function.
  // c.tasks is empty
  // c.process is empty
  List<Task> list = c.getTasks();
  // list is not empty, in this line fetch for tasks is made
  Process p = c.getProcess();
  // p is not empty, in this line fetch for process is made.

我知道很难确定只有Checklist才能获取,因为如果你想观察这些值,它们不再是null:D但这个LAZY FETCH意味着。

我认为这是应有的表现?如果是这样,如果你永远不会在这个函数中查看任务和进程,这是可以的(或者如果你只看其中的一些),但如果你将看到所有或几乎所有的任务和进程,那么它是更好的加载之前。 (使用EGER)。

希望有所帮助