私は比較的新しいHibernateです。Hibernate JPA:親オブジェクトがフェッチされたときに子オブジェクトをフェッチする方法。ただし、親オブジェクトのみを保持します
質問親オブジェクトをフェッチしたときに、子オブジェクトと親オブジェクトの両方をフェッチする方法です。ただし、持続時間中は、子オブジェクトのみを保持します。
By by、外部キーはNOTデータベースレベルで関連付けられています。
-------------------
ParentObject.java
-------------------
private Integer internalId;
private Set<ChildObject> childObjects = new HashSet<>(0);
private Integer userId;
//associated Setters as well.
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "InternalId", unique = true, nullable = false)
public Integer getInternalId() {
return this.internalId;
}
@OneToMany(fetch = FetchType.EAGER, mappedBy = "parentObject")
public Set<ChildObject> getChildObjects() {
return childObjects;
}
-------------------
ChildObject.java
-------------------
private Integer internalRecordId;
private Integer userId;
private ParentObject parentObject;
// associated setters and remaining getters.
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "userId", nullable = true)
public ParentObject getParentObject() {
return parentObject;
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "InternalId", unique = true, nullable = false)
public Integer getInternalId() {
return this.internalId;
}
コード
Scenario1:
Criteria criteria = getCriteria(ParentObject.java);
criteria.add(Restrictions.eq("internalId", 123);
Collection result = new LinkedHashSet(criteria.list());
List<ParentObject> resultSet = new ArrayList<>(result);
for(ParentObject parentObj : resultSet) {
parentObj.getChildObjects() --> Getting all associated Child Objects.
}
以下で細かい動作のみ子オブジェクトを永続化しようとする場合は、失敗します。
ChildObject childObj = new ChildObject();
childObj.setUserId(123456);
getSession().save(childObj);
業務フローは、親オブジェクトと空parentObject行を必要としないかもしれないので、私は、しかし、それは参照として親オブジェクトを必要としていることを理解し、この問題を解決できる方法をDBに持続してはいけませんか?
アドバイスありがとうございます! –
@SrinivasLakshman助けがあれば、その答えにAcceptedとマークしてください。 – yntelectual