JPA(またはHibernate)で複数のレベルを維持することは可能ですか?各リソースが別のリソースの「子」になることができるテーブル「リソース」があります。これは、複数のレベルで発生する可能性があります。関係を含めるために結合テーブルを使用しています。
私が達成したいのはこれです。
resource resource_relations
======== ==================
resource_type | resource_name parent | child
------------------------------ --------------------
type1 | P P | C
type2 | C C | G
type3 | G
私の永続エンティティは次のようになります。
リソース
private String name;
private ResourceType resourceType;
public Resource(resourceType, name){ ... }
@OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST)
private Set<ResourceRelation> components = new HashSet<ResourceRelation>();
@OneToMany(mappedBy = "child", cascade = CascadeType.PERSIST)
private Set<ResourceRelation> parents = new HashSet<ResourceRelation>();
public void addComponent(Resource r) { /*add "r" to "components"*/ }
ResourceRelation
@ManyToOne (cascade = CascadeType.PERSIST)
private Resource parent;
@ManyToOne (cascade = CascadeType.PERSIST)
private Resource child;
ここで、次のステートメントを実行します。
parent = new Resource(type1, P);
child = new Resource(type2, C);
grandChild = new Resource(type3, G);
child.addComponent(grandChild);
parent.addComponent(child);
persist(parent);
ただし、PとCのみが永続的になり、Gは永続化されません。どうすればよいですか?