我使用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