今日、私は JVM の非常に奇妙な動作を発見しました。a (通常はタイプ セーフ)List<Date>
が実際にList<MyObject>
は実行時に a を保持していました!
どうしてそんなことが起こったのだろうと思いますが、ウェブで何も見つかりませんでした。
それが状況です:私は with で作業していSpring Data JPA 1.2.0
ます。JBoss EAP 6.0 Server
JRE 1.6.0_18-b07
誤って、あるSpring Data JPA Repository
クラスで、式に間違った結果タイプが書き込まれました@Query
。次のようになっているはずです。
@Query("select distinct trunc(record.orderDateTime) from MyType record [...]" )
public List<Date> getOrderDates(...);
しかし、次のとおりでした。
@Query("select record from MyType record [...]" )
public List<Date> getOrderDates(...);
したがって、目的は日付のリスト ( java.util.Date
) をロードすることでした。これは、最初のコード スニペットのようにクエリが適切に定義されている場合に正常に機能します。
しかし、そのコーディング ミスにより、次のような結果になりました。List<MyType>
メソッドのシグネチャでList<Date>
. また、私のモデルでは、List<Date>
was/contained の属性がList<MyType>
. 私はそれをデバッグし、私の目を信じることができませんでした! MyType
このリストの内容を JSP に書き込むことさえできました (私がこの奇妙な動作を認識したのは、型一致 from toの試行で発生した Spring 式言語エラーが原因で JSP を表示できなくなったためでしDate
た。クラッシュする)。
Java の型安全性に対する信念を捨てようか。
誰もそのような問題を抱えたことがありますか?
これについての説明はありますか?
それを修正するために何かできることはありますか、それとも一般的な問題ですか? おそらく、JRE、JBOSS の別のバージョン...?