考虑这段代码。如果找不到该行,则此代码将该行插入数据库,然后仅在找到该行时才更新该行。 updateNode()方法根据用户输入为实体提供一些值,所以我在两种情况下都调用它。
session.beginTransaction();
node = (Node)session.createQuery("from Node").uniqueResult();
if (node == null) {
node = new Node();
updateNode();
session.save(node);
} else {
updateNode();
}
session.getTransaction.commit();
除了使用查询之外,是否有更好的方法来检查表中是否存在行?
答案 0 :(得分:1)
查明数据库中是否已存在某些内容的唯一方法是查询它。但是,您不需要单独的查询。由于mysql的INSERT... ON DUPLICATE KEY UPDATE功能,您只需要一个查询而不是两个查询。它也不需要任何额外的Java编码。
如果你想用hibernate做这件事,它必须是一个自定义查询,你需要在查询中返回插入的行ID和LAST_INSERT_ID。
答案 1 :(得分:1)
Is the cat alive or dead?你不知道没有检查它,所以你必须在数据库中执行查询。
我认为你的问题是要避免手动编写这样的查询,而是让Hibernate自己做。那么你可能想看看querying by example/prototype。
无论采用何种方法,都要记住并发问题;您可能想要应用一些独特的约束和/或乐观/悲观锁。