我有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)
但输出也包含子表记录。
答案 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)。
希望有所帮助