我使用Hibernate的Web項目,其中有兩個不同的類(節點,接口)休眠:添加子到父集合
節點
@Entity
@Table(name="NODES")
public class Node {
//...
@OneToMany(mappedBy="node", cascade={CascadeType.ALL, CascadeType.MERGE, CascadeType.PERSIST}, orphanRemoval=true)
private Set<Interface> interfaces = new HashSet<>();
//...
}
接口
@Entity
@Table(name="INTERFACES")
public class Interface {
//...
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="REF_NODE")
private Node node;
//...
}
一切都很好,
我的問題是我如何添加一個接口(chlid)到一個節點(父)已經持續?意味着如果我已經在數據庫中有2個接口的節點,例如我想添加第三個接口,我該怎麼做呢?
我的第一個快速的解決方案是使用原生SQL在Hibernate中,像這樣的:
public void addInteface(Interface i, Long idNode) {
//OpenSession..
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try {
//Start transaction
tx = session.beginTransaction();
//Native SQL in Hibernate
SQLQuery query = session.createSQLQuery("INSERT INTO INTERFACES (ID_INTERFACE, ALIAS, ID_NODE) VALUES (NULL, :Alias, :idNode)");
query.setParameter("ifAlias", i.getAlias());
query.setParameter("refNode", idNode);
//Some other parameters...
//Execute and Commit
query.executeUpdate();
tx.commit();
} catch (Exception e) {
if (tx != null) tx.rollback();
throw e;
} finally {
session.close();
}
}
它的工作原理,但它不是最好的解決辦法,我相信。
注:我發現一些主題在這裏與幾乎相同的標題,但沒有回答我的問題。
謝謝你的回答:) – 2014-09-25 17:25:45