2015-11-05 13 views
5

Hiện tại tôi đang làm việc trên một POC cho phần còn lại dữ liệu mùa xuân. Đang cố gắng để có được JSONout khả thi của một kho lưu trữ.Lỗi dữ liệu mùa xuân (SDR)? Persistent Entity Không được rỗng

Tôi có một lớp Entity (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; 
    } 

} 

và một kho lưu trữ tương ứng ..

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

     }   

bất cứ khi nào tôi nhấn

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

tôi nhận được lỗi sau: { "nguyên nhân": null, "message": "PersistentEntity không được rỗng!"}

Bây giờ đây là cách kho của tôi trông: Xin vui lòng đọc nhận xét về từng phương pháp

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

Tôi không chắc chắn những vấn đề với sự trở lại types.I gọi vào liên kết dưới đây để biết một số giải pháp là gì:

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

và bổ sung thêm 2 phương pháp để Repository của tôi, mà không có tác dụng đối với tôi

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

Tôi có một linh cảm đây là một lỗi trong SDR, hoặc tôi thiếu một cái gì đó?

+0

Câu hỏi trùng lặp. http://stackoverflow.com/a/30403914/621686 – bvulaj

+0

Hi Brandon, Câu trả lời bạn đã đăng không hoạt động trong trường hợp của tôi. Ngoài ra, đây không phải là một vấn đề thừa kế, không có lớp cơ sở, nhưng thông báo lỗi là như nhau. Bạn có thể vui lòng giúp giải pháp nếu bạn có bất kỳ ý tưởng nào không? Hay bạn có thể giới thiệu ai đó có thể? –

Trả lời

6

REST dữ liệu mùa xuân chỉ có thể trả về dữ liệu mà kho lưu trữ được đăng ký. Trong câu hỏi khác mà bạn tham khảo, bạn sẽ nhận thấy rằng họ đã tạo một kho lưu trữ tùy chỉnh dành riêng cho loại mà họ cần. Đây không phải là lỗi trong SDR, nó chỉ hoạt động như thế nào. Nó cũng giữ nó yên tĩnh.

Vì vậy, trong trường hợp của bạn, SDR chỉ có thể trả lại NewTask hoặc bộ sưu tập của NewTask.

+1

Có, tôi đã tìm ra một phần, nhưng như bạn thấy trong Câu hỏi ở trên, tại sao nó không ném cùng một lỗi khi tôi trả về một số nguyên? –

+0

Tôi gặp vấn đề tương tự khi trả về thuộc tính enum của một thực thể: '@Query ("chọn d.status từ Deal as d trong đó d.id =: id") Deal.Status findStatusById (@Param ("id") Dài id); ' Tôi hiểu, mùa xuân-dữ liệu còn lại không phải trả lại bất cứ thứ gì trừ tài nguyên, nhưng tại sao lại là một int? Mặt khác, nếu tôi muốn loại trừ truy vấn này khỏi bị tiếp xúc với phần còn lại của dữ liệu vào mùa xuân, thì điều này có thể xảy ra như thế nào? – Gregor

+0

Một int được chấp nhận bởi vì nó được giả định là một id của một tài nguyên (chú thích @Id trên một trường int). – afaulconbridge

0

Trong khởi động mùa xuân, nếu ứng dụng chính của mùa xuân không quét được tên miền của bạn (POJO) thì lỗi này sẽ bị loại trừ khi bạn đặt tất cả các lớp trong cùng một gói. Sau đó, bạn có thêm chú thích quét thành phần ở đầu lớp ứng dụng chính Spring

@ComponentScan(basePackages = "com.aaa.bbbb.ccccc") 
Các vấn đề liên quan