【发布时间】:2012-09-28 19:17:06
【问题描述】:
我有文本区域,我可以在其中输入要阻止的站点名称。所有输入的站点都存储到 SITES 表中。如果输入的任何站点都存在于 SITES 表中,我们应该忽略这些站点并插入剩余的站点。
我们应该如何使用hibernate来做到这一点?
【问题讨论】:
我有文本区域,我可以在其中输入要阻止的站点名称。所有输入的站点都存储到 SITES 表中。如果输入的任何站点都存在于 SITES 表中,我们应该忽略这些站点并插入剩余的站点。
我们应该如何使用hibernate来做到这一点?
【问题讨论】:
执行第一个查询:
select site.name from Site site where site.name in (:enteredSiteNames)
然后从输入的站点列表中删除所有找到的站点(因为它们已经在数据库中)。
然后遍历剩余的站点,并将它们持久化。
【讨论】:
在 Hibernate 或数据库级别中,您可以(并且可能应该)做的所有事情就是向包含站点名称的字段添加唯一约束。这将确保在添加重复项时引发异常。但是为了防止这种异常,您必须检查应用程序代码中预先存在的站点,例如通过对要添加的每个站点使用查询或一次加载完整的表,然后检查每个输入的站点名称。
请注意,您可能需要对网站名称进行某种规范化,例如修剪空格或转换为小写,以确保您识别出任何重复项(例如,www.EXAMPLE.com 和 www.example.com 可能应该被视为相等)。在 Hibernate Validator 中,您可以使用模式约束来强制执行此规范化。
【讨论】: