0

我不知道这已经被问过了。但我没有找到任何人。(无论如何,这对我的项目来说不是必需的。但是当我使用数据库和 Hibernate 时,我有一个疑问,现在有时间在这里问。所以到目前为止我还没有尝试过我要在这里问什么)

假设我的数据库中有表。我想将数据插入表中,但只有唯一行。

怎么可能?

我认为,从这个 SO Qestion中,我们可以将唯一的行插入到数据库中。

那么在 Java 中,使用 Using PreparedStatement,我们是否能够传递相同的查询,以便仅当该行在表中是唯一的时才会插入行?

如果可能,Java会抛出什么错误/异常?

如果不可能,最好的方法是什么?

如果我们使用hibernate呢?我们怎么能这样做呢?

如果我传递bean 类对象来保存字段,如何检查唯一行?

另外如何使用List of Objects执行相同的操作?

希望大家了解情况。

4

2 回答 2

1

Hibernate 对对象标识符 (id) 起作用,如果对象已经有标识符,那么 hibernate 将尝试更新该对象而不是插入。

您可以使用简单的解决方案,例如:从数据库获取主 ID 上的对象,如果对象存在提取标识符并将标识符设置为新对象,它将被更新,如果对象不存在,它将被插入并使用“saveOrupdate”

从休眠文档:

Hibernate 用户请求了一种通用方法,该方法要么通过生成新标识符来保存瞬态实例,要么更新/重新附加与其当前标识符关联的分离实例

saveOrUpdate() 执行以下操作:

  • 如果对象已在此会话中持久存在,则不执行任何操作

  • 如果与会话关联的另一个对象具有相同的标识符,则抛出异常

  • 如果对象没有标识符属性,则保存()它

  • 如果对象的标识符具有分配给新实例化对象的值,则保存()它

  • 如果对象由 or 版本化,并且版本属性值与分配给新实例化对象的值相同,则 save() 否则 update() 对象

于 2013-08-08T09:23:02.480 回答
1

那么在 Java 中,使用 PreparedStatement ,我们是否能够传递相同的查询,以便仅当该行在表中唯一时才会插入行?

如果您为表中的字段设置了唯一约束,则插入重复项将失败。

如果可能,Java 会抛出什么错误/异常?

您的数据库将引发错误;就像是 :

Duplicate entry 'xxxx' for key 'whatever'

希望您的 java 应用程序会以某种方式从数据库中显示该错误...

如果我传递 bean 类对象来保存字段,如何检查唯一行?

另外如何对对象列表执行相同的操作?

如果您正在操作 bean,那么在插入多行时 只需覆盖equals()并使用 ajava.util.Set而不是 a 。List

无论如何,就像@Muel 所说:“在数据库级别而不是应用程序级别强制唯一性要好得多。” 以免在您的数据库中获得损坏的数据。equals但是,在您的 bean 中覆盖并检查您是否没有两个(或更多)相同的对象也很容易。

于 2013-08-08T09:29:00.360 回答