Spring Data JPQL не фильтрует связанную сущность отношений OneToMany - PullRequest
0 голосов
/ 24 ноября 2018

Я работаю с данными пружины и использую Spring Boot 2.1.0.RELEASE и использую JPQL для запроса поля связанной / внедренной сущности для отношения @OneToMany для связанного фильтра класса сущностей, но оно получает всевнедренный объект также использует fetch = FetchType.EAGER, но не фильтрует связанный объект и загружает весь объект.Ниже приведены сущность и класс репо.

Первый класс сущности

@Entity
@Table(name = "USER")
public class UserEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, unique = true)
    private String username;

    @OneToMany(mappedBy = "user", targetEntity = AuthorityEntity.class, fetch = FetchType.LAZY, cascade=CascadeType.ALL)
    private List<AuthorityEntity> authorities;

    //Setter getter
}

Второй класс сущности

@Entity
@Table(name = "AUTHORITY")
public class AuthorityEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String authorityType;
    private String textType;

    @JsonBackReference
    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    private UserEntity user;

    //Setter getter
}

Интерфейс репозитория

@Repository
public interface UserRepo extends JpaRepository<UserEntity, Long> {
    UserEntity findByUsernameAndAuthoritiesAuthorityType(String username, String authority);
}

Iтакже пробовал HQL @Query("select u from UserEntity u JOIN FETCH AuthorityEntity a on u.id = a.user where u.username = ?1 and a.authorityType = ?2"), но он также выбирает все дочерние объекты, а не фильтрующие дочерние.

Дайте мне знать, где я не прав, требуется ли какая-либо конфигурация?

1 Ответ

0 голосов
/ 01 декабря 2018

После усердной работы я нашел решение в виде JPA Entity Graph

@NamedEntityGraph(name = "USER.AUTHORITY", attributeNodes = { @NamedAttributeNode("authorities") })
public class UserEntity 

и

@EntityGraph(value = "USER.AUTHORITY", type = EntityGraphType.LOAD)
UserEntity findByUsernameAndAuthoritiesAuthorityType(String username, AuthorityType authority); 

, которое отлично работало для OneToMany и фильтровало дочерний объект, но оно также не выполнялосьслучай отношений ManyToMany.

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