2015-11-05 12 views
5

現在、私はSpring Data RestのPOCに取り組んでいます。リポジトリの実行可能なJSONoutを取得しようとしています。Spring Data Rest(SDR)バグ?永続的なエンティティはnullであってはなりません

私は

http://localhost:8080/POCDB/newTasks/search/findByMyId?id=1 

を打つ時はいつでも、私は次のエラーを取得する

@RepositoryRestResource 
    @PreAuthorize("hasRole('ROLE_ADMIN')") 
    public interface NewTaskRepository extends CrudRepository<NewTask, Serializable>{ 


     @Query("SELECT t.address FROM NewTask t where t.id = :id") 
     String findByMyId(@Param("id") int id); 

     }   

..エンティティクラス(付けたnewtask)

@Entity 
@Table(name="newtable") 
public class NewTask { 

    @Id 
    @Column(name="newid") 
    private int id; 


    @Column(name="newage") 
    private int age; 

    @Column(name="newaddress") 
    private String address; 



    public String getAddress() { 
     return address; 
    } 
    public void setAddress(String address) { 
     this.address = address; 
    } 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public int getAge() { 
     return age; 
    } 
    public void setAge(int age) { 
     this.age = age; 
    } 

} 

と対応するリポジトリを持っています。 { "cause":null、 "message": "PersistentEntityはnullであってはなりません!"}

は今ここに私のリポジトリがどのように見えるかです:私はリターンtypes.Iに問題が何であるかわからない

//Gives- PersistentEntity must not be null!!! 
    @Query("SELECT t.address FROM NewTask t where t.id = :id") 
    String findByMyId(@Param("id") int id); 


    //WORKS FINE 
    @Query("SELECT t.id FROM NewTask t where t.id = :id") 
    int findId(@Param("id") int id); 


    //WORKS FINE 
    @Query("SELECT t.id FROM NewTask t where t.id = :id") 
    Integer findIdTwo(@Param("id") int id); 

    //Gives- PersistentEntity must not be null!!! 
    @Query("SELECT t.id FROM NewTask t") 
    List<Integer> findIds(); 

各メソッドのコメントをお読みくださいいくつかの解決策については、以下のリンクを参照さ:

How does one create a custom query in jparepository but return an object other than the entity?

とは

// returns in some weird format 
    @Query("SELECT t.address FROM NewTask t where t.id = :id") 
    PString findByMyId(@Param("id") int id); 

    //Gives- PersistentEntity must not be null!!! 
    @Query("SELECT t.address FROM NewTask t") 
    List<PString> findAddress(); 
私のために動作しません、私のリポジトリへの2つの以上のメソッドを追加しました0

私はこれがSDRのバグであるかのような気がしますか?何か不足していますか?

+0

重複した質問。 http://stackoverflow.com/a/30403914/621686 – bvulaj

+0

こんにちはBrandon、 投稿した回答は私の場合は機能しません。 また、これは継承の問題ではなく、基本クラスはありませんが、エラーメッセージは同じです。 ご迷惑をおかけいたしましたら、お手伝いできますか?または、誰かを紹介することができますか? –

答えて

6

SpringデータRESTは、リポジトリが登録されているデータのみを返すことができます。あなたが参照するもう1つの質問では、彼らが必要とするタイプのために特別なカスタムリポジトリを作成したことに気づくでしょう。これはSDRのバグではなく、その機能です。また、RESTfulに保ちます。

あなたのケースでは、SDRはNewTaskまたはNewTaskのコレクションのみを返すことができます。

+1

はい、私はその部分を理解しましたが、上の質問に見られるように、なぜ整数を返すときに同じエラーをスローしませんか? –

+0

エンティティの列挙型属性を返すとき、非常に似た問題があります。 '@Query( "d.id =:id"とd.id =:idのd.statusを選択してください) Deal.Status findStatusById(@Param( "id" )長いID); '私は、春のデータ休憩はリソース以外の何も返さないと考えていますが、なぜ大丈夫ですか?一方、このクエリをバネデータレストに晒さないようにしたい場合は、どうすれば可能ですか? – Gregor

+0

intは、リソースのid(intフィールドの@Idアノテーション)とみなされるため、受け入れ可能です。 – afaulconbridge

0

春のメインアプリケーションでドメイン(POJO)クラスのスキャンに失敗した場合、すべてのクラスを同じパッケージに入れない限り、このエラーがスローされます。次に、Springメインアプリケーションクラスの上にコンポーネントスキャン注釈を追加しました。

@ComponentScan(basePackages = "com.aaa.bbbb.ccccc") 
関連する問題