如何在插入之前检查记录是否存在

时间:2014-11-26 22:14:02

标签: java hibernate orm

我正在使用Hibernate 4.3.6 Final和MySQL 5.5.37。

假设我有两个表BookWords以及一些解析书中单词并将其添加到Words表的代码。肯定会出现不止一本书中的单词。但是,如果某个单词已经在数据库中,我不想要一个新单词。唯一的问题是,如果Hibernate足够聪明,可以为此提供某种功能吗?

有几种解决方案,但它们都不漂亮:

  1. 在创建任何Word对象之前检查,如果数据库中已经存在这样的对象。表现太可怕了。
  2. 捕获尝试插入副本并处理该异常时引发的异常。可怕的做法。
  3. 对数据库中的单词进行某种静态索引,定期更新,并在列表中搜索单词。可能稍快一点,但在性能和记忆方面仍然很糟糕。
  4. 有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您有三种选择:

  1. 来自客户端(Hibernate)查看是否存在记录,如果没有插入(可能受竞争条件限制)
  2. 尝试插入记录,处理错误。你说这是不好的做法,但我认为这是一种很好的做法。
  3. 在数据库中放置一个触发器,如果​​记录存在则跳过插入
  4. 我会选择#2