我得到了异常:重复键值违反了唯一约束“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(未知 来源)
感谢,我怎么可以切换到自动生成的ID?它也能解决问题吗? – michael
请记住,如果您使用自动生成的值,则每次调用'save()'时都会创建新记录。您将以相同用户标识的多个记录结束。如果这真的是你想要阅读的东西http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-mapping-identifier –