2016-01-28 22 views
6

私はbootspringで学習しています。コンポジットPK(Hibernate JPA)でエンティティで "findBy"を使用する方法

findByDate(int date);私がint Dateを内部クラスに移動するまで動作していました。

今、私は新しいエントリを保存することができますが、私は彼らに私は変更する必要がありますどのようなBYDATE

をretriveできないのですか?

@Transactional 
public interface ExpirationDAO extends JpaRepository<ExpirationDTO, Long> { 

    public ExpirationDTO findByDate(int date); 
} 

@Embeddable 
    public static class IdKey implements Serializable{ 
     @NotNull 
     int date; 
     @ManyToOne 
     ProductDTO product; 

     public IdKey(){ 
     } 
     //setters and getters 
    } 
    @EmbeddedId 
    private IdKey id; 
    @NotNull 
    int units; 

    public ExpirationDTO(){  
    } 
     //setters and getters 
} 

この例外がスローされます。

org.springframework.data.mapping.PropertyReferenceException: No property date found for type ExpirationDTO! 
+0

データベースの日付はどのような属性ですか?文字列で 'findByDate(String date)'を持ち、 'IdKey'で' int'を持っているからです。例外はありますか?そして、あなたが働いていないものをより具体的にしてください。 – Patrick

+0

あなたはそのことについて正しいです。 Stringの代わりにintでなければならないが、私は問題ではない。そのミスでうまくいきました。 例外: 'org.springframework.data.mapping.PropertyReferenceException:タイプExpirationDTOのプロパティの日付が見つかりません! – dmorar

+0

' expirationDTO'に 'int Date'を追加すると' findByDate'がExpirationDTOオブジェクトを返します。 – Patrick

答えて

15

あなたが代わりにロングのリポジトリに埋め込まれたキー・クラスの名前を含める必要があります。 この1(テストしていない)試してみてください。findById後にあり

public interface ExpirationDAO extends JpaRepository<ExpirationDTO, IdKey> { 
    public List<ExpirationDTO> findByIdDate(int date); 
} 

はあなたEmbeddedIdDateは、組み込みクラスの属性です。そしてもう一つ:あなたが埋め込まれたキーの一部のみを使用している場合、あなたは一つだけの結果を期待することはできません...

+1

ありがとう! findByIdDate(int date);作品!はい、私は1つの結果を見ているわけではありません。 今私はそれがManyToManyの関係でなければならないと思っています。多くの製品には多くの有効期限があり、多くの有効期限には異なる製品があります。 また、@パトリック、あなたの時間もありがとう。 – dmorar

0

あなたがリポジトリに埋め込まれたキー・クラスの名前が含まれており、また、アンダースコア(_)

を追加する必要があります

次のようにテストしました:

public interface ExpirationDAO extends JpaRepository<ExpirationDTO, IdKey> { 
    public List<ExpirationDTO> findByIdKey_Date(Date date); 
} 
関連する問題