我是Spring Data Rest的新手,並嘗試使用它的基本概念。到目前爲止,一切運行良好,但幾天前我注意到,在將預測投入商業後,應用性能突然下降。春天的數據休息添加摘錄投影關閉懶惰提取
這些都是我的實體,資料庫和投影
@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();
}
因此,所有工作得很好,直到我加入了摘錄投影到ItemRepository @RepositoryRestResource(excerptProjection=ItemExcerpt.class)
這樣做之前,當我打http://localhost:9191/categories休眠產量正如我預期的那樣:
select
category0_.id as id1_0_,
category0_.name as name2_0_
from
category category0_
這是我在添加後得到的輸出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=?
我的結論是,摘錄投影使得延遲抓取上@OneToMany關係,這會導致性能下降被忽略。 有誰知道一種方法來繞過這個問題,或者這可能是一種預期的行爲?