0

Spring Data JPA + Postgresql を使用しており、Postgresql LTree タイプを実装するエンティティ「Category」があり、次のようになります。

@Id
@SequenceGenerator(name = "categories_id_seq", sequenceName =  "categories_id_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "categories_id_seq")
@Column(name = "id", updatable = false)
private Integer id;

@Column(name = "name")
private String name;

@Column(name = "title")
private String title;

@Column(name = "trail")
@Type(type = "ltree")
private String trail;

@Column(name = "layer")
private Integer layer;

@Column(name = "parent_id")
private Integer parentId;

@ManyToOne()
@Fetch(FetchMode.JOIN)
@JoinColumn(name = "parent_id", insertable = false, updatable = false)
private Category parent;

@OneToMany
@Fetch(FetchMode.JOIN)
@BatchSize(size = 20)
@JoinColumn(name = "parent_id", insertable = false, updatable = false)
private Set<Category> childrens;

私の問題は、特定のノードから「リーフ」ノードにサブツリー全体をロードしたい場合です。Hibernate は、親と子のペアごとに 2 つの追加の選択を発行します。

この休止状態の動作を変更するにはどうすればよいですか?

4

1 に答える 1

0

Hibernate のオーバーヘッドを最小限に抑えたい場合は、エンティティでカスタムを定義するか、直接使用しないで@NamedNativeQueryください。createNativeQuery(sqlString, Category.class)ORM は便利ですが、複雑なクエリやテーブル構造ではあまり効果的ではありません。

于 2016-04-05T12:23:37.927 に答える