ツリー構造 (1 つのテーブル内の親/子要素) を取得しようとしたときに問題が発生しました。
以下のクラスを使用して、ルート ノードから始めて、getSubNodes() を使用し、その子を受け取ります。ただし、db に子ノードを持つ子ノードで getSubNodes() を呼び出すと、getSubNodes() は空のリストを返します (db データには複数のツリー レベルが含まれます)。
@Entity
@Table(name = "navigation_items")
public class NavigationItem extends Model {
public static NavigationItemFinder find = new NavigationItemFinder();
private static final long serialVersionUID = 1L;
@Id
private UUID id;
@Column (unique=true)
private String key;
@ManyToOne
private NavigationItem parentNode;
@OneToMany (mappedBy="parentNode", cascade=CascadeType.ALL)
private List<NavigationItem> subNodes;
@Column
@Required
private String title;
@Column
private String subtitle;
@ManyToOne
private PageBlock page;
...
public List<NavigationItem> getSubNodes() {
return subNodes; // <- This crazily but provenly only returns results on the first level of the hierarchy...
}
ただし、getter を使用して subnodes プロパティを返さず、代わりにファインダー クエリを使用すると、すべてが期待どおりに機能し、完全なツリーを取得できます。
List<NavigationItem> result = find.where().eq("parentNode", this).findList();
Logger.debug("NavItem " + getTitle() + "[" + getId() +"]" + ": returning # subnodes: " + result.size());
ここで何か不足していますか、それとも (他の) ebean バグでしょうか?