0

我有文本区域,我可以在其中输入要阻止的站点名称。所有输入的站点都存储到 SITES 表中。如果输入的任何站点在 SITES 表中,我们应该忽略这些站点并插入剩余的站点。

我们应该如何使用hibernate来做到这一点?

4

2 回答 2

0

在 Hibernate 或数据库级别中,您可以(并且可能应该)做的所有事情就是向包含站点名称的字段添加唯一约束。这将确保在添加重复项的情况下引发异常。但是为了防止这种异常,您必须在应用程序代码中检查预先存在的站点,例如,通过对要添加的每个站点使用查询,或者一次加载完整的表,然后检查每个输入的站点名称。

请注意,您可能需要对站点名称进行某种规范化,例如修剪空格或转换为小写,以确保您识别出任何重复项(例如www.EXAMPLE.com,并且www.example.com可能应该被视为相等)。在 Hibernate Validator 中,您可以使用模式约束来强制执行此规范化。

于 2012-09-28T21:19:29.373 回答
0

执行第一个查询:

select site.name from Site site where site.name in (:enteredSiteNames)

然后从输入的站点列表中删除所有找到的站点(因为它们已经在数据库中)。

然后遍历剩余的站点,并将它们持久化。

于 2012-09-28T21:20:43.817 回答