質問

クロージャ (FCM) とジェネリックを組み合わせると、完全にタイプセーフな基準を設けることが可能になるでしょうか。

// The following works without a cast as Foo.id is a 'long' field.
List<Long> ids = session.createCriteria(Foo.class)
                        .setProjection(Foo#id)
                        .list();

// The following is a compilation error, as Foo.bar is defined as an int, and not a string
session.createCriteria(Foo.class)
       .addRestriction(Restrictions.eq(Foo#bar,"blah"))
       .list();

タイプセーフ基準に関する JPA 2.0 仕様を読みました。しかし、まだ少し物足りない。

さらに、ここで基準を使用しているのは、一般的なコードの型安全性を向上させる例としてだけです。コーディングを高速化するために、Java の静的型付けを多用しました。しかし、その結果、コードの入力を無視する部分に時々噛まれることがあります。たとえば、HQL クエリです。

役に立ちましたか?

解決

あなたが説明しているコードはクロージャを使用していませんが、 フィールドリテラル (メソッドリテラル)。古き良き時代のように クラスリテラル. 。これらは基準 API で役立つ可能性があります。の JPA 2 ソースコード生成の回避策 タイプセーフなクエリ インターフェイスをそれに置き換えることができるためです。 もし これは JDK7 の一部になります。

他のヒント

トーマスが指摘するように、

、これは厳密にはクロージャを必要としません。これは、誰が見ている、非常にどのような提案を知らない与えられ、現時点では、空気中のすべてのアップです。 FCMは、実際に提案の基礎となっている場合は特に、スティーブンColebourneが発表について誰とsusprisedのように見えたことを考えると、明らかではありません。

多くの人がニールGafter氏の不思議な-改訂-多かれ少なかれ、右を指しています形成するものへとヒントとしてスペックに-Devoxx-プレゼンテーション発表 - 閉鎖 - - - 与えられたとして、クロージャがかかる場合があります。断っておくが、むしろ、FCMのような改訂案のルックス(審美的)!

これスペックは、あなたが(上記の行の「メソッド参照」の下)を参照してください参照のようなものを含んでいます、そしてもちろんFCMは同じを持っています。はい、これは間違いなくあなたが可能に示唆するだろう。これについて読んで私の非常に最初に考えたのは、それがこの点で、同じ周りJPA / Hibernateは、および/または当社独自の抽象化レイヤーにどのような影響を与えるかでした。タイプセーフ、あなたの基準でrefactorableメソッド参照?地獄ええます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top