2016-04-22 5 views
0

私のモデルでより複雑な属性を問合せる方法については、あらゆるタイプのドキュメントを見つけるのに苦労しています。例えばSpring Data JPA問合せの構築@embeddedIDの「問合せ作成」メソッド

私は私のリポジトリで

public class MyEmbedded{ 
@EmbeddedID 
private MyEmbeddedPK embeddedPK; 
} 

@Embeddable 
public class MyEmbeddedPK{ 

    private Integer age; 

    private Integer zip;  
} 

を持っている私はCrudRepositoryを実装していますし、

public List<MyEmbedded> findByageAndZip(String age, String zip); 

を行うことができると期待するしかし、それは動作するようには思えません。ドキュメンテーションは、@ EmbeddedIdに関して何も言いません。 @OneToMany属性を照会する場合も同じですが、それについては何も見つかりませんでした。

ドキュメント私は参照しています。 http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repository-query-keywords

は、このクエリの作成がどのように機能するか上の任意のより良いドキュメントがありますか?

答えて

1

私は奇妙なことに、それはドキュメントにあったが、私はちょうどそれを拾うていなかった、私の答えを見つけたと思います。あなたはラクダのケースを介して一緒にプロパティを組み合わせる必要があります。私はこれを試みたが、私は明らかに私のケースを台無しにしたことを誓ったことができた。

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-property-expressions

4.4.3。プロパティ式

しかし、あなたはまた、ネストされたプロパティを横断することにより制約を定義することができます。 PersonにZipCodeを持つアドレスがあるとします。その場合

リストfindByAddressZipCode(郵便番号郵便番号)のメソッド名。

は、プロパティトラバーサルx.address.zipCodeを作成します。解決アルゴリズムは、パーツ全体(AddressZipCode)をプロパティとして解釈することから始まり、その名前を持つプロパティ(ドメイン化されていない)のドメインクラスをチェックします。アルゴリズムが成功すると、そのプロパティが使用されます。そうでない場合、アルゴリズムは、ラクラクケース部分のソースを右側から頭と尾に分割し、対応するプロパティ(この例ではAddressZipとCode)を探します。アルゴリズムがその頭部を持つプロパティを見つけたら、それはテールを取り、そこからツリーを構築し続け、テールを上に説明したように分割します。最初の分割が一致しない場合、アルゴリズムはスプリットポイントを左に移動し(Address、ZipCode)、処理を続行します。

1

私は春データJPAがこの機能をサポートしているかどうかわからないんだけど、それが均等に囲んでいるエンティティ自体の状態フィールドに適用することができるように、組み込みのidプロパティに基づいてクエリを実行するために少し複雑なようです。しかし、これは春データランタイムはIDの実際のタイプを知る必要がありますとしても、次のシグネチャを使用してリポジトリを指定することを忘れないでくださいQueryと@Param

@Query("SELECT m FROM MyEmbedded m WHERE m.embeddedPK.age = :age AND m.embeddedPK.zip = :zip") 
public List<MyEmbedded> findByageAndZip(@Param("age") String age, @Param("zip") String zip); 

でそれを指定することにより、JP QLで容易に達成することができますクラス。

@Repository 
public interface MyEmbeddedRepository extends CrudRepository<MyEmbedded, MyEmbeddedPK> {..} 
関連する問題