避免在 Hibernate 中使用自动递增键重复
我正在尝试使用 Hibernate 自动递增 id,但是,我尝试避免重复。
class Service
{
Long id; // auto increment
String name;
String owner;
Boolean incremental;
// setter and getter
}
我想要实现的是,每当我要保存的新服务对象与数据库中任何现有服务对象具有相同的名称和所有者(无论数据字段增量是否相同)时,它将是一个重复条目。在这种情况下,我不想再向数据库中添加另一个条目。如何修改 hbm.xml 文件以避免此问题?
I am trying to use Hibernate to auto increment the id, however, I try to avoid duplication.
class Service
{
Long id; // auto increment
String name;
String owner;
Boolean incremental;
// setter and getter
}
What I want to achieve is, whenever the new service object I want to save has the same name and owner(no matter if the data field incremental are the same or not) as any of the existing one in the database, it will be a duplicated entry. In this case, I don't want to add another entry into the Database anymore. How to revise the hbm.xml files to avoid this issue?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用注释来执行相同的操作。
在实体类之上,您编写以下内容:
这将告诉 hibernate 列名和所有者应该是唯一的。
You can use annotations to do the same.
On top of your entity class you write the following:
This will tell hibernate that the columns name and owner should be unique together.
如果您需要 id 列,可以保留它。
你需要的是
* 数据库级别对两列的唯一约束。
(如果你使用hbmtoddl工具,你可能需要类似的东西:)
这样
,你就不能插入重复的数据。
,则需要
If you need the id column, you can keep it.
What you need is
* a unique constraint at the database level on both columns.
(if you use hbmtoddl tool, you may need something like that :
)
This way, you can not insert duplicates data.
After that if you don't want your code to break when you try to insert duplicates, you need to
您有多种选择:
composite-id
或natural-id
无论哪种方式,您都应该使用
name
和owner
覆盖hashCode()
和equals(..)
You have a number of options:
composite-id
ornatural-id
Either way you should override
hashCode()
andequals(..)
usingname
andowner