例外があります:重複キー値が一意制約 "client_pkey"に違反しています キー(xmppid)=(xyz813 @ deweet/prototype1006)は既に存在します。Hibernate重複キー値が例外に違反しました
私の設定は、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を直接ポイントdoes notの私はそれが 私が作成し、クライアントを救う唯一の場所だと思います。
pl.samsung.cs.deweet.serverで pl.samsung.cs.deweet.server.RequestHandler.onAddVirtualDevice(RequestHandler.java:182)で$ Proxy23.createClient(不明 出所) で.RequestHandler.handleRequests(RequestHandler.java:117) java.lang.Thread.runでpl.samsung.cs.deweet.network.impl.XmppNetContext $ 8 $ 1.run(XmppNetContext.java:518) (不明で ソース)
感謝を参照してください、どのように私は、自動生成されたIDに切り替えることができますか?それはまた問題を解決するだろうか? – michael
自動生成された値を使用すると、 'save()'を呼び出すたびに新しいレコードが作成されることに注意してください。同じユーザーIDの複数のレコードで終了します。それが本当にあなたが欲しいものならここhttp://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-mapping-identifier –