Spring Data Projection не работает - PullRequest
0 голосов
/ 01 июня 2018

Похоже, что проекции Spring-Data не работают должным образом.Также аннотированные поля @CreationDate являются пустыми.Что с этим не так?

Это класс сущности категории:

package api.product.domain;

import lombok.AccessLevel;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.hibernate.annotations.DynamicUpdate;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;

import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.Set;

    @Entity
    @Getter
    @DynamicUpdate
    @EqualsAndHashCode(of = "name")
    @NoArgsConstructor
    class Category {

        @Id
        @GeneratedValue(generator = "ID_GENERATOR")
        private Long id;

        @OneToMany(fetch = FetchType.LAZY, mappedBy = "category", cascade = CascadeType.ALL)
        private Set<Product> products;

        @Setter
        @Accessors(chain = true)
        @Column(unique = true, length = 20, nullable = false)
        private String name;

        @ManyToOne(cascade = {CascadeType.ALL})
        @JoinColumn(name = "parent_category_id")
        @Setter
        @Accessors(chain = true)
        private Category parentCategory;

        @CreatedDate
        @Setter
        private LocalDateTime creationDate;

        @LastModifiedDate
        @Setter
        private LocalDateTime lastModifiedDate;

        Category(String name, Category parentCategory){
            this.name = name;
            this.parentCategory = parentCategory;
        }
    }

Интерфейс проекции:

public interface ShowCategoryDto {
    @Value("#{target.id}")
    Long getId();
    String getName();
    Set<ProductBasicDto> getProducts();
}

И репозиторий:

interface CategoryRepository extends Repository<Category, Long> {

    Set<ShowCategoryDto> findAll();

    Optional<ShowCategoryDto> findOptionalById(Long id);

    Category save(Category category);

    Optional<Category> getOneById(Long id);

    void removeById(Long id);
}

Теперь, когда я вызываю метод findAll, он возвращает:

creationDate:null
id:1
lastModifiedDate:null
name:"wwwwwwwwww"
parentCategory:null
products:[]

Так что я вижу здесь две проблемы.Во-первых, проекция не применяется, а во-вторых, в полях creationDate и lastModifiedDate есть нули.Кто-нибудь знает причину, по которой это происходит, и может поделиться со мной?

1 Ответ

0 голосов
/ 01 июня 2018

findAll - это метод интерфейса CrudRepository, его подпись :

List<T> findAll()

, где T - ваша сущность .

Если вам нужен пользовательский метод, который возвращает проекции вместо сущностей, вы должны использовать другое имя метода, например:

List<MyProjection> findBy()
List<MyProjection> findAllBy()
List<MyProjection> findProjectionsBy()
List<MyProjection> getProjectionsBy()

и т. Д.

Подробнее: Создание запроса Работа с проекциями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...