0

我有一个包含四列的表:

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-objects,它可能具有 的值namefunction并且contact已经在数据库中。在这种情况下,我希望 Hibernate 获取id该对象的我,否则我想保存该对象。

使用saveOrUpdate()我只是得到一个:

org.hibernate.exception.ConstraintViolationException: Duplicate entry 'NAME-FUNCTION-CONTACT: NAME' for key 'name_function_contact'

我怎样才能做到这一点?非常感谢!

4

2 回答 2

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);
}

奇迹般有效!感谢大家!

于 2013-11-13T09:53:27.517 回答
0

我不是休眠专家。但是从 Mysql 的角度来看,您执行以下操作。

用于INSERT IGNORE INTO...添加表中的值。如果插入的行数为0,则可以通过SELECT语句手动获取行的ID。

编辑: LAST_INSERT_ID() 在这里是错误的。我已经编辑了答案。

于 2013-11-12T16:29:00.503 回答