2016-11-07 7 views
0

Jerseyを使用してRESTサービスを開発しているうちに、エンティティグラフの注釈が無視されていることがわかりました。以下のコード。Spring Rest - Entity Graph Annotation無視され、完全なエンティティがフェッチされます

@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

私はおそらくパーティーには遅すぎますが、私は同様の問題がありました。あなたが記述したタスクにエンティティグラフを使用するのは当然ですが、残念ながらそれはうまくいきません。その理由は、ジャクソンがシリアル化中にエンティティ内のすべてのゲッターを呼び出すためです。そのため、エンティティグラフに含まれるアトリビュート(および他のものは遅延ロードされているもの)とは関係ありません。とにかく私は単純な解決策を見つけました:@JsonIgnoreは間違いなくEntity Graphほど柔軟ではありません。さらに、すべてのJPA ORMが100%エンティティグラフをサポートする準備ができているわけではありません。https://hibernate.atlassian.net/browse/HHH-9270

関連する問題