У меня есть 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);
}
Что я сделал не так?