Helo那里。
我正在尝试执行多对多获取所有查询。为了清楚起见,我正在考虑将一个集合中的一个集合撤回。即,我们将得到一个结果集,但在该结果集中,将有一个通过外键链接到它的所有对象的集合。现在,要做到这一点,我有一个集合,我这样注释......
@ManyToMany
@JoinTable(name="QUICK_LAUNCH_DISTLIST",
joinColumns=@JoinColumn(name="QUICK_LAUNCH_ID"),
inverseJoinColumns=@JoinColumn(name="LIST_ID"))
private Collection<QuickLaunchDistlist> distributionLists;
这似乎与教科书有关...... 我调用一个看起来像这样的命名查询......
@NamedQuery(name="getQuickLaunch", query = "SELECT q FROM QuickLaunch q")
这样执行......
qlList = emf.createNamedQuery("getQuickLaunch").getResultList();
每次拨打此电话时,我都会收到第一个集合中的预期数据。但是这些收藏品似乎都没有填充它。为了找出原因,我查看了调用生成的sql ...这就是我发现的......
我得到了这个例外......
This is a FFDC log generated for the Default Resource Adapter from source:com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeQuery
The exception caught:java.sql.SQLSyntaxErrorException: ORA-00904: "T1"."QL_DISTLIST_ID": invalid identifier
SQL Error Code is 904 SQL State is :42000
此查询......
SELECT t1.QL_DISTLIST_ID, t2.LIST_ID, t2.CREATE_DATE, t2.CREATE_USERID, t2.description, t2.flag, t2.MOD_DATE, t2.MOD_USERID, t2.ORGANIZATION_ID, t2.owner, t2.STATUS_ID, t1.MESSAGE_TYPE_ID, t1.MOD_DATE, t1.MOD_USERID, t1.QUICK_LAUNCH_ID FROM EPCD13.QUICK_LAUNCH_DISTLIST t0, EPCD13.QUICK_LAUNCH_DISTLIST t1, EPCD13.DISTRIBUTION_LIST t2 WHERE t0.QUICK_LAUNCH_ID = ? AND t0.LIST_ID = t1.QL_DISTLIST_ID AND t1.LIST_ID = t2.LIST_ID(+)
如果你查看它要求撤回的第一列,你会发现它选择了t1.QL_DISTLIST_ID ......问题是,我的数据库中没有任何这样的命名列!?!?!?为什么要调用该列呢? JPA如何生成它调用的查询?如果我知道这一点,我可能会更接近于弄清楚这里出了什么问题或做错了什么。任何帮助将不胜感激。