我正在尝试使用Hibernate自动增加id,但是,我尽量避免重复。
class Service
{
Long id; // auto increment
String name;
String owner;
Boolean incremental;
// setter and getter
}
我想要实现的是,每当我要保存的新服务对象具有与数据库中任何现有服务对象相同的名称和所有者(无论数据字段增量是否相同)时,它将是一个重复的条目。在这种情况下,我不想再向数据库中添加另一个条目。如何修改hbm.xml文件以避免此问题?
答案 0 :(得分:2)
您可以使用注释来执行相同的操作。
在您的实体类之上,您可以编写以下内容:
@Table(uniqueConstraints = @UniqueConstraint(columnNames = { "name","owner"}))
@Entity
class Service
{
Long id; // auto increment
String name;
String owner;
// setter and getter
}
这将告诉hibernate列名和所有者应该是唯一的。
答案 1 :(得分:1)
您有多种选择:
composite-id
或natural-id
无论哪种方式,您都应该使用hashCode()
和equals(..)
name
和owner
答案 2 :(得分:1)
如果您需要id列,则可以保留它。 你需要的是什么 *两列上数据库级别的唯一约束。
(如果你使用hbmtoddl工具,你可能需要这样的东西:
<properties name="key" unique="true">
<property name="name" .../>
<property name="owner" .../>
</properties>
)
这样,就无法插入重复数据。
之后如果您在尝试插入重复项时不希望代码中断,则需要