Jestem nowy w Spring Data Rest i staram się bawić podstawowymi pojęciami. Wszystko działa dobrze, ale kilka dni temu zauważyłem, że wydajność aplikacji nagle spadła po wprowadzeniu prognoz do biznesu.Wiosenne dane Spoczywaj, dodając projekcję wykluczeń leniwego pobierania
To są moje jednostki, repozytoria i projekcja
@Entity
public class Item {
@Id
@GeneratedValue(strategy = TABLE)
private long id;
private String code;
private String name;
@ManyToOne(targetEntity=Category.class)
@JoinColumn(name="category_id", referencedColumnName="id")
private Category category;
//getters & setters
}
@Entity
public class Category {
@Id
@GeneratedValue(strategy = TABLE)
private long id;
private String name;
@OneToMany(mappedBy="category", targetEntity=Item.class, fetch=FetchType.LAZY)
private Set<Item> items;
//getters & setters
}
@RepositoryRestResource(excerptProjection=ItemExcerpt.class)
public interface ItemRepository extends CrudRepository<Item, Long>{
}
@RepositoryRestResource
public interface CategoryRepository extends CrudRepository<Category, Long>{
}
@Projection(name="excerpt", types=Item.class)
public interface ItemExcerpt {
String getName();
}
Tak, wszystko działało dobrze aż dodałem projekcję wypis do ItemRepository @RepositoryRestResource(excerptProjection=ItemExcerpt.class)
Przedtem, kiedy uderzę http://localhost:9191/categories hibernacji wyjście było jak się spodziewałem, że będzie:
select
category0_.id as id1_0_,
category0_.name as name2_0_
from
category category0_
jest to wyjście, które otrzymuję po dodaniu excerptProjection=ItemExcerpt.class
Hibernate:
select
category0_.id as id1_0_,
category0_.name as name2_0_
from
category category0_
Hibernate:
select
items0_.category_id as category4_1_0_,
items0_.id as id1_1_0_,
items0_.id as id1_1_1_,
items0_.category_id as category4_1_1_,
items0_.code as code2_1_1_,
items0_.name as name3_1_1_
from
item items0_
where
items0_.category_id=?
Mój wniosek jest taki, że projekcja fragment sprawia leniwe sprowadzanie ignorowane na @OneToMany relacji, co prowadzi do spadku wydajności. Czy ktoś wie, jak ominąć ten problem, czy może jest to oczekiwane zachowanie?