Je suis nouveau à Spring Data Rest et essaie de jouer avec ses concepts de base. Tout fonctionne bien jusqu'à présent, mais il y a quelques jours, j'ai remarqué que la performance de l'application a soudainement chuté après la mise en œuvre des projections.Spring Data Rest ajout d'une projection d'extrait éteint la recherche paresseuse
Ce sont mes entités, les référentiels et la projection
@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();
}
Donc, tout a bien fonctionné jusqu'à ce que j'ajouté la projection extrait du ItemRepository @RepositoryRestResource(excerptProjection=ItemExcerpt.class)
Avant de le faire, quand je frappe http://localhost:9191/categories Hibernate sortie était comme je m'y attendais:
select
category0_.id as id1_0_,
category0_.name as name2_0_
from
category category0_
C'est la sortie que j'obtiens après avoir ajouté 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=?
Ma conclusion est que la projection d'un extrait fait d'être ignoré paresseux fetching sur les relations @OneToMany, ce qui conduit à une baisse de performance. Est-ce que quelqu'un connaît un moyen de contourner ce problème ou est-ce un comportement attendu?