经过几天努力找回通过外键链接到表的集合之后,我才意识到我链接到的表实际上是将表连接到其他表和实际数据(chock one up for normalized表)。
我仍然在努力从ManyToOne注释变量中获取带有外键引用的集合,但有没有办法可以从实际包含信息的表中提取数据?有没有人碰到这个实例?
更新:根据请求,我将发布一些代码实例......这将是我将要调用的实体中的命名查询...
@NamedQuery(name="getQuickLaunchWithCollections", query = "SELECT q FROM QuickLaunch q LEFT JOIN FETCH q.quickLaunchDistlistCollection LEFT JOIN FETCH q.quickLaunchPermCollection LEFT JOIN FETCH q.quickLaunchProviderCollection")})
这些将是我希望填写的收藏品......
@OneToMany(mappedBy="quickLaunchId", fetch=FetchType.EAGER)
private List<QuickLaunchPerm> quickLaunchPermCollection;
@OneToMany(mappedBy="quickLaunchId", fetch=FetchType.EAGER)
private List<QuickLaunchProvider> quickLaunchProviderCollection;
@OneToMany(mappedBy="quickLaunchId", fetch=FetchType.EAGER)
private List<QuickLaunchDistlist> quickLaunchDistlistCollection;
如您所见,我将fetch类型设置为eager。从技术上讲,我应该得到一些数据?但实际上,这些只是将我真正想要撤回的数据链接到表格。我需要弄清楚如何最终获得这些数据。
这就是我调用命名查询的方式......
listQL = emf.createNamedQuery("getQuickLaunchWithCollections").getResultList();
好吧,好像LEFT JOIN FETCH
导致我的运行时抛出某种类型的表示。目前尚不清楚它是什么。但我觉得好像我没有采用那种技术。我会尝试稍微不同的东西。
答案 0 :(得分:1)
我建议简化示例,以解决问题,因为你现在正走遍全球。
指出mappedBy="quickLaunchId"
属性,QuickLaunchPerm
实体的QuickLaunch
属性名为"quickLaunchId"
。这是真的吗?
如果不是,那么您需要在QuickLaunchPerm
中定义它:
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "QUICK_LAUNCH_ID")
private QuickLaunch quickLaunchId;
//getters setters