Hibernate: я не хочу получать поля ассоциации с Lazy или Eager Загрузка - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть 4 класса: Комната, Сообщение, Пользователь, RoomUser.

Здесь ассоциативные части этих классов:

Комната

    @JsonManagedReference
    @OneToMany(fetch=FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true, mappedBy="messageRoom")
    @Where(clause = "messages_enabled = true")
    protected Set<Message> messages;

    @OneToMany(fetch=FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true, mappedBy="room")
    protected Set<RoomUser> users;

Сообщение

    @JsonBackReference
    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "messages_room")
    private Room messageRoom;

Пользователь

    @OneToMany(fetch=FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true, mappedBy="user")
    private Set<RoomUser> rooms;

RoomUser

    @Id
    @ManyToOne
    @JoinColumn(name="rooms_id")
    private Room room; // int
    @Id
    @ManyToOne
    @JoinColumn(name="users_id")
    private User user; // long

Я хочу НЕ загружать сообщений и пользователей в сущности Room (даже если это EAGER или LAZY), когда я запрашиваю свою базу данных в CrudRepository.Поэтому я добавил FetchType.LAZY, думая, что эти поля не загрузятся, если я не вызову методы получения и установки.НО, данные все равно загружаются !!

Вот мой контроллер, сервис и репозиторий:

Контроллер

    @GetMapping(path = {"/get/{id}"}, produces="application/json")
    public void findComplete(@PathVariable int id) {
        Room room = this.roomService.findRoomById(id);
        //System.out.println(room.toString());
    }

Сервис

    @Transactional(readOnly = true)
    public Room findRoomById(int id) {
        return this.roomRepository.findById(id);
    }

Репозиторий

@Repository
public interface RoomRepository extends CrudRepository<Room, Integer> {

    public Set<Room> findByName(String name);

    public Room findById(int id);
}

Что я сделал не так?

1 Ответ

0 голосов
/ 25 сентября 2019

Попробуйте с @Basic (fetch = FetchType.LAZY)

...