0

在努力了几天试图取回通过外键链接到表的集合之后,我才意识到我链接到的表实际上是将表链接到具有实际数据的其他表(为规范化表填充一个)。

我仍在努力从带有外键引用的 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;

如您所见,我将获取类型设置为渴望。所以从技术上讲,我应该取回一些数据?但实际上,这些只是将我真正想要拉回的数据链接起来。我需要弄清楚如何最终取回这些数据。

这就是我调用该命名查询的方式......

listQL = emf.createNamedQuery("getQuickLaunchWithCollections").getResultList();

好吧,似乎 LEFT JOIN FETCH
导致我的运行时抛出某种异常。目前还不清楚它是什么。但我觉得我用这种技术一无所获。我要尝试一些稍微不同的东西。

4

1 回答 1

1

我建议简化示例以面对问题,因为您现在正在全球范围内。

指定mappedBy="quickLaunchId"属性,您是说,该QuickLaunchPerm实体具有QuickLaunch名为的属性"quickLaunchId"。这是真的?

如果不是,那么您需要在以下位置定义它QuickLaunchPerm

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "QUICK_LAUNCH_ID")
private QuickLaunch quickLaunchId;

//getters setters
于 2012-04-17T14:02:34.847 回答