Значение дублирующего ключа Hibernate нарушает исключения - PullRequest
0 голосов
/ 01 июля 2011

Я получил исключение: двойное значение ключа нарушает уникальное ограничение "client_pkey" Ключ (xmppid) = (xyz813 @ deweet / prototype1006) уже существует.

Моя конфигурация - Tomcat 6.0, hibernate 3.3.1, c3pO 0.9.2 или dbcp.

Я не знаю, как этого избежать, я думал, что сделать это UniqueConstraint и вызвать его в транзакции должно единолично все.

Не могли бы вы дать мне понять, что я делаю не так?

@Override
@Transactional(readOnly = false)
public Client createClient(String userid) {
    Client c = new Client(userid);
    currentSession().save(c);
    return c;
}

Класс клиента определен как показано ниже

@Entity
@Table(name = "CLIENT", uniqueConstraints = { @UniqueConstraint(columnNames = { "xmppId" }) })
public class Client {


    @Id
    private String xmppId;


    @Override
    public boolean equals(Object o) {
        Client c = (Client) o;
        if (c.xmppId.equals(this.xmppId))
            return true;
        return false;
    }

    @Override
    public int hashCode() {
        return this.xmppId.hashCode();
    }

    ...
}

Это не указывает непосредственно на этот метод, но на $ Proxy23.createClient, но я думаю, что это единственное место, где я создаю и сохраняю клиента.

в $ Proxy23.createClient (неизвестно Источник) в pl.samsung.cs.deweet.server.RequestHandler.onAddVirtualDevice (RequestHandler.java:182) в pl.samsung.cs.deweet.server.RequestHandler.handleRequests (RequestHandler.java:117) в pl.samsung.cs.deweet.network.impl.XmppNetContext $ 8 $ 1.run (XmppNetContext.java:518) на java.lang.Thread.run (неизвестно Источник)

1 Ответ

0 голосов
/ 01 июля 2011

Вы не используете автоматически сгенерированный идентификатор.Это означает, что вам придется назначить его (предположительно, userId).Когда вы звоните save, он будет пытаться вставить его каждый раз, и вы получите исключение.

В зависимости от того, что вы пытаетесь выполнить, вы можете использовать saveOrUpdate вместо save.

См. Эту ссылку http://www.javabeat.net/tips/161-difference-between-hibernates-saveupdate-a.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...