こんにちは。
多対多のgetallクエリを実行しようとしています。明確にするために、私はコレクション内のコレクションをプルバックするようにしています。つまり、結果セットを取得しますが、その結果セットには、外部キーを介してリンクされているすべてのオブジェクトのコレクションがあります。さて、これを行うために、私はこのように注釈を付けたコレクションを持っています...
@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は、呼び出すクエリをどのように生成しますか?それを知っていれば、ここで何が悪かったのか、何が悪かったのかを理解するのに少し近づいたかもしれません。どんな助けでも大歓迎です。