[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.스프링 데이터 REST는 리포지토리가 등록 된 데이터 만 반환 할 수 있습니다. 여러분이 참조하는 다른 질문에서, 그들은 그들이 필요로하는 타입을 위해 특별히 맞춤 저장소를 만들었다는 것을 알게 될 것입니다. 이것은 SDR의 버그는 아니며 단지 SDR의 기능입니다. 또한 RESTful을 유지합니다.
스프링 데이터 REST는 리포지토리가 등록 된 데이터 만 반환 할 수 있습니다. 여러분이 참조하는 다른 질문에서, 그들은 그들이 필요로하는 타입을 위해 특별히 맞춤 저장소를 만들었다는 것을 알게 될 것입니다. 이것은 SDR의 버그는 아니며 단지 SDR의 기능입니다. 또한 RESTful을 유지합니다.
따라서 귀하의 경우 SDR은 NewTask 또는 NewTask 컬렉션 만 반환 할 수 있습니다.
-
==============================
2.스프링 부트에서 스프링 메인 애플리케이션이 도메인 (POJO) 클래스를 스캔하지 못하면 모든 클래스를 동일한 패키지에 넣지 않으면이 오류가 발생합니다. 그런 다음 Spring 주 애플리케이션 클래스 위에 컴포넌트 스캔 주석을 추가합니다.
스프링 부트에서 스프링 메인 애플리케이션이 도메인 (POJO) 클래스를 스캔하지 못하면 모든 클래스를 동일한 패키지에 넣지 않으면이 오류가 발생합니다. 그런 다음 Spring 주 애플리케이션 클래스 위에 컴포넌트 스캔 주석을 추가합니다.
@ComponentScan(basePackages = "com.aaa.bbbb.ccccc")
from https://stackoverflow.com/questions/33538426/spring-data-rest-sdr-bug-persistent-entity-must-not-be-null by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 레스트의 ConstraintViolationException (0) | 2019.02.24 |
---|---|
[SPRING] 봄 부팅 외부 log4j 파일 항아리? (0) | 2019.02.24 |
[SPRING] 석영 관련 코드를 삭제 한 후에도 Tomcat 서버의 메모리 누수 오류 (0) | 2019.02.24 |
[SPRING] 이 최대 절전 모드 템플릿 bulkUpdate가 작동하지 않는 이유 (0) | 2019.02.23 |
[SPRING] Spring에서 일반적인 인터페이스를 구현하는 모든 bean 가져 오기 (0) | 2019.02.23 |