Когда я вызываю PlaceRepository.findById code> он запускает три запроса выбора:
("sql")
- SELECT * FROM place p where id = arg
- SELECT * FROM user u where u.id = place.user.id
- SELECT * FROM city c LEFT OUTER JOIN state s on c.woj_id = s.id where c.id = place.city.id
Когда я использую CityRepository.findById, подавление вызывает два выбора:
- < ли>SELECT * FROM city c where id = arg
- SELECT * FROM state s where id = city.state.id
Определения модели:
Место:
@Entity
@Table(name = "place")
public class Place extends Identified {
@Fetch(FetchMode.JOIN)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_user_author")
private User author;
@Fetch(FetchMode.JOIN)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "area_city_id")
private City city;
//getters and setters
}
Город:
@Entity
@Table(name = "area_city")
public class City extends Identified {
@Fetch(FetchMode.JOIN)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "area_woj_id")
private State state;
//getters and setters
}
Репозитории:
PlaceRepository
public interface PlaceRepository extends JpaRepository
, PlaceRepositoryCustom {
Place findById(int id);
}
Репозиторий пользователей:
public interface UserRepository extends JpaRepository {
List findAll();
User findById(int id);
}
CityRepository:
public interface CityRepository extends JpaRepository, CityRepositoryCustom {
City findById(int id);
}
Подробнее здесь: https://stackoverflow.com/questions/296 ... g-data-jpa