私はSpring Data Restを初めて使用し、その基本的な概念を試してみようとしています。これまでのところすべてうまくいきましたが、数日前に私は、予測をビジネスに入れた後にアプリケーションのパフォーマンスが突然低下したことに気付きました。Springデータ抜粋投影を追加して残りの部分を遅延読み込みオフにする
これらは私のエンティティ、リポジトリと投影されている
@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();
}
だから、すべてがそれまではうまく働いた私はhttp://localhost:9191/categories Hibernateの出力を打ったとき、私は、これを行う前にItemRepository @RepositoryRestResource(excerptProjection=ItemExcerpt.class)
に抜粋投影を添加し、私はそれがために期待通り:
select
category0_.id as id1_0_,
category0_.name as name2_0_
from
category category0_
これは私がを追加した後に取得する出力であります
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関係、上無視されて遅延フェッチを作るということです。 誰もがこの問題を回避する方法を知っていますか、これはおそらく予想される動作ですか?