복붙노트

[SPRING] 스프링 데이터 레스트 (SDR) 버그? 영속 엔티티 null 일 필요는 없습니다.

SPRING

스프링 데이터 레스트 (SDR) 버그? 영속 엔티티 null 일 필요는 없습니다.

현재 스프링 데이터 나머지에 대한 POC 작업을하고 있습니다. 저장소의 실행 가능한 JSONout을 얻으려고합니다.

나는 엔터티 클래스 (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;
    }

}

및 해당 저장소 ..

    @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);

      }         

언제든지

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

다음 오류가 발생합니다.      { "cause": null, "message": "PersistentEntity가 null이 아니어야합니다!"}

이제 내 리포지토리가 어떻게 보이는지 다음과 같습니다. 각 메서드에 대한 설명을 읽으십시오.

   //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();

반환 유형에 대한 문제가 무엇인지 잘 모르겠습니다. 일부 솔루션에 대해서는 아래 링크를 참조했습니다.

jparepository에서 사용자 정의 쿼리를 어떻게 만들지 만 엔티티가 아닌 다른 객체를 반환하는 방법은 무엇입니까?

내 저장소에 2 가지 방법을 더 추가했습니다.이 방법은 저에게 효과적이지 않습니다.

    // 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();

나는 이것이 SDR의 버그이거나, 뭔가 빠져 있다는 직감을 가지고 있습니까?

해결법

  1. ==============================

    1.스프링 데이터 REST는 리포지토리가 등록 된 데이터 만 반환 할 수 있습니다. 여러분이 참조하는 다른 질문에서, 그들은 그들이 필요로하는 타입을 위해 특별히 맞춤 저장소를 만들었다는 것을 알게 될 것입니다. 이것은 SDR의 버그는 아니며 단지 SDR의 기능입니다. 또한 RESTful을 유지합니다.

    스프링 데이터 REST는 리포지토리가 등록 된 데이터 만 반환 할 수 있습니다. 여러분이 참조하는 다른 질문에서, 그들은 그들이 필요로하는 타입을 위해 특별히 맞춤 저장소를 만들었다는 것을 알게 될 것입니다. 이것은 SDR의 버그는 아니며 단지 SDR의 기능입니다. 또한 RESTful을 유지합니다.

    따라서 귀하의 경우 SDR은 NewTask 또는 NewTask 컬렉션 만 반환 할 수 있습니다.

  2. ==============================

    2.스프링 부트에서 스프링 메인 애플리케이션이 도메인 (POJO) 클래스를 스캔하지 못하면 모든 클래스를 동일한 패키지에 넣지 않으면이 오류가 발생합니다. 그런 다음 Spring 주 애플리케이션 클래스 위에 컴포넌트 스캔 주석을 추가합니다.

    스프링 부트에서 스프링 메인 애플리케이션이 도메인 (POJO) 클래스를 스캔하지 못하면 모든 클래스를 동일한 패키지에 넣지 않으면이 오류가 발생합니다. 그런 다음 Spring 주 애플리케이션 클래스 위에 컴포넌트 스캔 주석을 추가합니다.

    @ComponentScan(basePackages = "com.aaa.bbbb.ccccc")
    
  3. from https://stackoverflow.com/questions/33538426/spring-data-rest-sdr-bug-persistent-entity-must-not-be-null by cc-by-sa and MIT license