检查表中是否存在行

时间:2015-08-22 06:06:29

标签: mysql hibernate java-ee

考虑这段代码。如果找不到该行,则此代码将该行插入数据库,然后仅在找到该行时才更新该行。 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();

除了使用查询之外,是否有更好的方法来检查表中是否存在行?

2 个答案:

答案 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

无论采用何种方法,都要记住并发问题;您可能想要应用一些独特的约束和/或乐观/悲观锁。