我有一个包含四列的表格:
CREATE TABLE `participants` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(128) NOT NULL,
`function` VARCHAR(255) NOT NULL,
`contact` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `name_function_contact` (`name`, `function`, `contact`)
)
从应用程序中我得到participants
- 对象,这些对象可能包含name
,function
和contact
的值,这些对象已经存在于数据库中。在这种情况下,我希望Hibernate为我提供该对象的id
,否则我想保存该对象。
使用saveOrUpdate()
我得到一个:
org.hibernate.exception.ConstraintViolationException: Duplicate entry 'NAME-FUNCTION-CONTACT: NAME' for key 'name_function_contact'
我怎样才能做到这一点?非常感谢!
答案 0 :(得分:1)
由于答案表明Hibernate不能独自完成它(真糟糕!)我解决了它本地sql"方式:
Participants tempParti = ((Participants) session.createQuery("FROM Participants WHERE name = '" + p.getName() + "' AND function = '" + p.getFunction() + "' AND contact = '" + p.getContact() + "'").uniqueResult());
if (tempParti != null) {
p = tempParti;
} else {
session.save(p);
}
像魅力一样!谢谢你们所有人!
答案 1 :(得分:0)
我不是Hibernate的专家。但是从Mysql的角度来看,你可以做到以下几点。
使用INSERT IGNORE INTO...
在表格中添加值。如果插入的行数为0,则可以通过SELECT
语句手动获取行的ID。
编辑:LAST_INSERT_ID()在这里错了。我编辑了答案。