Spring Rest-аннотации графа сущностей игнорируются, а полная сущность извлекается

При разработке служб REST с использованием Jersey я обнаруживаю, что аннотации графа сущностей игнорируются, и я получаю полный объект. Код ниже.

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

Jersey Rest Service

@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 ......

Как видно, загружена вся сущность, а не атрибуты. Что могло быть причиной ?

1 ответ

  1. Я, вероятно, слишком поздно для партии, но у меня была похожая проблема. Кажется естественным использовать Entity Graph для задачи, которую вы описали, но, к сожалению, это не сработает. И причина этого-Джексон, который вызывает каждый геттер в вашей сущности во время сериализации, поэтому в конце дня не имеет значения, какие атрибуты вы включили в свой граф сущности (а другие только лениво загружены), потому что Джексон получит их в любом случае. Я нашел только одно простое решение: @JsonIgnore, которое определенно не так гибко, как Entity Graph. Кроме того, не все JPA ORM готовы к 100% поддержке графа сущностей, см. https://hibernate.atlassian.net/browse/HHH-9270