Типы выборки JPA - PullRequest
       47

Типы выборки JPA

0 голосов
/ 13 июля 2020

У меня есть две модели, классифицируемые как пользователи и авторитеты. Я использовал тип выборки EAGER, чтобы все данные, даже данные из таблиц полномочий, были извлечены, поскольку они сопоставлены друг с другом, но по какой-то причине он не извлекает детали из таблицы полномочий.


@Getter
@Setter
@Entity
@Table
public class Users {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    @Column(unique = true)
    private String email;
    private String firstname;
    private String lastname;
    private String password;
    @OneToMany(mappedBy = "users",
            cascade = CascadeType.PERSIST,
            fetch = FetchType.EAGER,
            targetEntity = Authorities.class)
    private Set<Authorities> authorities;
}

@Getter
@Setter
@Entity
@Table
public class Authorities {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String role;
    @ManyToOne(targetEntity = Users.class,
            cascade = CascadeType.PERSIST,
            fetch = FetchType.EAGER)
    @JoinColumn(name = "authorities")
    private Users users;

}
@Repository
public interface UserRepository extends JpaRepository<Users, Integer> {

    Optional<Users> findByEmail(String email);
}

Этот метод findByEmail не извлекает все детали из базы данных. Это только выборка данных из таблицы пользователей, но не из таблицы полномочий, хотя я использую тип выборки EAGER.

1 Ответ

0 голосов
/ 13 июля 2020

Я думаю, что Spring Data игнорирует типы выборки и режим выборки. Вы можете использовать Entity Graphs. См. Документацию

@Getter
@Setter
@Entity
@Table
@NamedEntityGraph(name = "authorities.detail",  attributeNodes = NamedAttributeNode("authorities"))
public class Users {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private int id;
  @Column(unique = true)
  private String email;
  private String firstname;
  private String lastname;
  private String password;
  @OneToMany(mappedBy = "users",
        cascade = CascadeType.PERSIST,
        fetch = FetchType.EAGER,
        targetEntity = Authorities.class)
  private Set<Authorities> authorities;

}

...