【发布时间】:2017-11-23 08:22:29
【问题描述】:
我对 Hibernate 比较陌生。
问题是在获取父对象时如何同时获取子对象和父对象;但是在持久化期间,只持久化子对象。
外键不在数据库级别关联。
-------------------
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-row 不应该在 DB 中持久化,如何解决这个问题?
【问题讨论】: