Salve a tutti,
sono al primo progetto con EJB3.0 e mi trovo ad avere un problema con la gestione di una insert in un db.
Ho una tabella UTENTE così composta:
-user: varchar (chiave)
-password:varchar
Questo è il codice della mia entity:
E questa la mia session Bean:codice:import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="KGTWANAUSER01") public class User implements Serializable { private static final long serialVersionUID = 1L; @Id @Column(name="USER") private String USER; @Column(name="PASSWORD") private String PASSWORD; //Costruttore standard public User(String us, String pswd) { this.user=us; this.password=pswd; } public String getUSER() { return USER; } public String getPASSWORD() { return PASSWORD; } public void setUSER(String uSER) { USER = uSER; } public void setPASSWORD(String pASSWORD) { PASSWORD = pASSWORD; } }
codice:import javax.ejb.Local; import javax.ejb.Stateless; import javax.ejb.Remote; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import model.User; @Stateless @Remote(HelloWorldBeanRemote.class) @Local(HelloWorldBeanLocal.class) public class HelloWorldBean implements HelloWorldBeanRemote, HelloWorldBeanLocal { @PersistenceContext (unitName="KGTMANAGER") EntityManager em; public HelloWorldBean() { // TODO Auto-generated constructor stub } public String getMessage(){ User prova= new User(); return prova.getCOGNOME(); } public User insert(String user, String password){ User us= new User(user,password); em.persist(us); return us; } }
Il problema è che quando vado a fare un inserimento su uno user già esistente il sistema va in blocco perchè ovviamente il DB restituisce l'errore di chiave duplicata. La mia domanda è, quale è la procedura corretta da svolgere in questo caso?
Fare una select prima facendo un Lock della tabella e poi fare la persist, oppure catturare in qualche modo l'errore della persist prima che il Jboss vada in errore, o altro?
Grazie a chiunque possa darmi una mano
Alessandro

Rispondi quotando