Ich bin neu bei Spring Data Rest und versuche, mit seinen grundlegenden Konzepten zu spielen. Bisher läuft alles gut, aber vor ein paar Tagen ist mir aufgefallen, dass die Anwendungsleistung nach der Umsetzung der Projektionen plötzlich nachgelassen hat.Spring Data Rest Hinzufügen von Auszugsprojektion schaltet sich faul holen
Dies sind meine Einheiten, Repositories und der Vorsprung
@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();
}
Also, alles hat gut funktioniert, bis ich den Auszug Projektion auf die ItemRepository hinzugefügt @RepositoryRestResource(excerptProjection=ItemExcerpt.class)
Bevor Sie dies tun, wenn ich http://localhost:9191/categories Ausgang Hibernate getroffen wurde wie ich es erwartet habe:
Dies ist die Ausgabe, die ich nach dem Hinzufügenbekomme
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=?
Meine Schlussfolgerung ist, dass der Auszug Projektion lazy fetching macht auf @OneToMany Beziehung ignoriert wird, was zu einem Leistungsabfall führt. Kennt jemand einen Weg, um dieses Problem zu umgehen, oder ist das vielleicht ein erwartetes Verhalten?