2016-11-07 86 views
0

使用Jersey開發REST服務時,我發現實體圖註釋被忽略,我得到完整的對象。下面的代碼。Spring Rest - 實體圖註解忽略並完成實體

@Entity 
@Table(name = "CONCERN") 
@XmlRootElement 
@EntityListeners(ConcernListener.class) 
@NamedEntityGraph(name="concern.search", attributeNodes={ 
     @NamedAttributeNode("referenceId"), 
     @NamedAttributeNode("name"), 
     @NamedAttributeNode("mobileNumber"), 
     @NamedAttributeNode("email"), 
     @NamedAttributeNode("concernDetail"), 
     @NamedAttributeNode(value = "concernType", subgraph = "concernType")}, 
     subgraphs = @NamedSubgraph(name = "concernType", attributeNodes = {@NamedAttributeNode("descEn"),@NamedAttributeNode("descAr")}) 
    ) 
public class Concern { 

    @Id 
    @Basic(optional = false) 
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "TXN_REPORT_CONCERN_SEQ") 
    @SequenceGenerator(name = "CONCERN_SEQ", sequenceName = "TXN_REPORT_CONCERN_SEQ", allocationSize = 0) 
    private Long id; 

    @Basic(optional = false) 
    @Size(min = 1, max = 30) 
    @Column(name = "REFERENCE_ID", nullable = false, length = 30) 
    private String referenceId; 
....... 

庫代碼

public interface ReportConcernRepository extends CrudRepository<Concern, Long> { 


    @EntityGraph(value = "concern.search", type = EntityGraphType.FETCH) 
    @Query("SELECT c FROM Concern c") 
    public List<Concern> readAll(); 
} 

澤西REST服務

@GET 
    @Produces(MediaType.APPLICATION_JSON) 
    @Path("findAll") 
    public List<Concern> getAllConcerns(){ 
     return reportConcernService.getAllConcerns(); 
    } 

輸出JSON

{"id":240,"referenceId":"671606","name":"TestM","mobileNumber":"777777","email":"1","concernDetail":"1","latlong":"100_100","address":"this is a test address","concertTypestr":null,"concernType":{"id":1,"descEn":"Concern Type","descAr":"Concern Type(AR)"},"statusType":{"id":1,"statusEn":"Open","statusAr":"Open (AR)"},"concernAttachment":{"id":240,"attachment":"/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAGIAdcDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKKKACiiigAooooAKKKKACi ...... 

如可以看到的整個實體已經被加載,而不是屬性。可能是什麼原因 ?

回答

0

我可能爲晚會太晚了,但我有類似的問題。對你描述的任務使用實體圖似乎很自然,但不幸的是這不起作用。原因是傑克遜在序列化過程中調用了實體中的每個吸氣器,所以在一天結束時,你在Entity Graph中包含哪些屬性並不重要(其他屬性只是延遲加載),因爲Jackson會得到它們無論如何。我發現只有一個簡單的解決方案:@JsonIgnore絕對不像實體圖那樣靈活。另外,並非所有JPA ORM都可以用於100%實體圖形支持,請參閱https://hibernate.atlassian.net/browse/HHH-9270