Spring Data Rest (SDR ) bug? Persistent Entity Must not be null

心已入冬 提交于 2020-01-10 04:03:46

问题


Currently I am working on a POC for Spring Data Rest. Trying to get workable JSONout of a repository.

I have an Entity Class (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;
    }

}

and a corresponding repository..

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

      }         

whenever I hit

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

I get the following error: {"cause":null,"message":"PersistentEntity must not be null!"}

Now here is how my repository looks: Please read the comments on each method

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

I am not sure what are the issues with return types.I referred the link below for some solution:

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

and added 2 more methods to my Repository, which don't work for me

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

I have a hunch this is a bug in SDR, or am I missing something?


回答1:


Spring Data REST can only return data for which the repository is registered for. In the other question that you reference, you'll notice that they created a custom repository specifically for the type that they needed. This isn't a bug in SDR, it's just how it functions. It also keeps it RESTful.

So in your case, SDR can only return NewTask or collections of NewTask.




回答2:


In Spring Boot, if spring main application failed to scan for your domain(POJO) classes then this error will be thrown unless you put your all classes in the same package. Then you have add component scan annotation on top of Spring main application class

@ComponentScan(basePackages = "com.aaa.bbbb.ccccc")



回答3:


I'm using Spring Data Mongo as opposed to JPA but what worked for me was including the _class field in the Mongo "select" statement. Spring uses this field to map the DB results back into an entity / document.

Also take a look at @TypeAlias so that you have a consistent _class value as you shuffle around your domain classes.

I also ran into the same problem when I premtively projected the DB results with Spring projections. Later when I was converting the results into paginated resources the framework could not identify the projection interface as a persistent entity and therefore could not find the necessary metadata it needed to make the conversion for me. The solution for this use case was a custom resource assembler.



来源:https://stackoverflow.com/questions/33538426/spring-data-rest-sdr-bug-persistent-entity-must-not-be-null

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!