0

「フォルダ階層」タイプの親子関係の取得に1つの問題があります。理想的には、プレーンなOracle SQLでは、CONNECTBY句を使用するのは簡単です。しかし、Hibernateでは、何らかの理由で、親から子へ、および子から親へのダブル「LEFTOUTERJOIN」になります。

問題: Hibernateが「Dashboard」フォルダーのオブジェクトを「Cartersianproduct」で取得すると、親/子がプルされますが、同じ子フォルダーもダッシュボードにアタッチされます。

ここに詳細があります、私は次のコードフラグメントに関係をタイプしただけです。テーブル:

DASHBOARD {
  ID INTEGER PRIMARY KEY,
  NAME VARCHAR2(100) ...
}
FOLDER {
  ID INTEGER PRIMARY KEY,
  DASHBOARD_ID INTEGER,
  NAME VARCHAR2(100),
  PARENT_FOLDER_ID INTEGER .....
}

public class DashBoard{
    ....
    ....

@OneToMany(mappedBy = "dashboard", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@OrderBy("NAME ASC")
@Sort(type = SortType.NATURAL)
public SortedSet<Folder> getFolders() {
    return folders;
}    

}

public class Folder{
....
....
    @ManyToOne(fetch = FetchType.EAGER, optional = false, cascade = CascadeType.ALL)
@JoinColumn(name = "DASHBOARD_ID", nullable = false)
public DashBoard getDashBoard() {
    return dashboard;
}

@OneToMany(mappedBy = "parent", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@OrderBy("NAME ASC")
@Sort(type = SortType.NATURAL)
public SortedSet<Folder> getChildFolders() {
    return folders;
}             

@ManyToOne(fetch = FetchType.EAGER, optional = true, cascade = CascadeType.ALL)
@JoinColumn(name = "PARENT_FOLDER_ID")
public Criterion getParent() {
    return parent;
}
}
4

1 に答える 1