我在删除rich:dataTable中的单元格时遇到问题。 如果我单击单元格中的按钮,我得到以下错误代码:
java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint (BENNI.UK_2WUR6HEJBEGNNLNT0AFNFHJIB) violated
但是,这并非每次都发生。有时我可以轻松删除没有此错误的单元格。
我的主要代码如下:
Controller.java
@Named
@SessionScoped
public class Controller implements Serializable {
private static final long serialVersionUID = 1L;
private String email;
private Long kundennummer;
private EntityManagerFactory emf = Persistence
.createEntityManagerFactory("Hochladen");
@Inject
private Datei datei;
@Inject
private Benutzer benutzer;
public Benutzer getBenutzer() {
return benutzer;
}
public void setBenutzer(Benutzer benutzer) {
this.benutzer = benutzer;
}
public String check() {
EntityManager em = emf.createEntityManager();
TypedQuery<Benutzer> ben = em
.createQuery(
"SELECT b FROM Benutzer b WHERE b.email = :email AND b.kundennummer = :kundennummer",
Benutzer.class);
ben.setParameter("email", email);
ben.setParameter("kundennummer", kundennummer);
List<Benutzer> liste = ben.getResultList();
if (liste.size() == 1) {
benutzer = liste.get(0);
return "main.xhtml?faces-redirect=true";
} else {
return null;
}
}
public void listener(FileUploadEvent event) throws Exception {
UploadedFile item = event.getUploadedFile();
datei = new Datei();
datei.setGroesse(item.getData().length);
datei.setName(item.getName());
datei.setDatum(new Date());
try {
InputStream in = item.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i = 0;
while ((i = in.read()) != -1) {
baos.write(i);
}
datei.setDatei(baos.toByteArray());
in.close();
benutzer.getDateienListe().add(datei);
EntityManager em = emf.createEntityManager();
EntityTransaction tr = em.getTransaction();
tr.begin();
em.persist(datei);
em.merge(benutzer);
tr.commit();
em.close();
FacesMessage m = new FacesMessage("Erfolgreich hochgeladen");
FacesContext.getCurrentInstance().addMessage("erfolgreich", m);
} catch (Exception e) {
e.printStackTrace();
}
}
public String loeschen(Datei datei) {
EntityManager em = emf.createEntityManager();
EntityTransaction tr = em.getTransaction();
tr.begin();
datei = em.merge(datei);
benutzer = em.merge(benutzer);
tr.commit();
benutzer.getDateienListe().remove(datei);
tr.begin();
em.merge(benutzer);
em.remove(datei);
tr.commit();
em.close();
return null;
}
public String abmelden() {
FacesContext.getCurrentInstance().getExternalContext()
.invalidateSession();
return "login.xhtml?faces-redirect=true";
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Long getKundennummer() {
return kundennummer;
}
public void setKundennummer(Long kundennummer) {
this.kundennummer = kundennummer;
}
public Datei getDatei() {
return datei;
}
public void setDatei(Datei datei) {
this.datei = datei;
}
}
Datei实体类
@Entity
public class Datei implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private Long groesse;
@Lob
private byte[] datei;
@Temporal(TemporalType.TIMESTAMP)
private Date datum;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getGroesse() {
return groesse;
}
public void setGroesse(long groesse) {
this.groesse = groesse;
}
public byte[] getDatei() {
return datei;
}
public void setDatei(byte[] datei) {
this.datei = datei;
}
public Date getDatum() {
return datum;
}
public void setDatum(Date datum) {
this.datum = datum;
}
public Datei() {
// TODO Auto-generated constructor stub
}
}
最后我的Benutzer实体课
@Entity
public class Benutzer implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String email;
private Long kundennummer;
@OneToMany
private List<Datei> dateienListe;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public long getKundennummer() {
return kundennummer;
}
public void setKundennummer(long kundennummer) {
this.kundennummer = kundennummer;
}
public List<Datei> getDateienListe() {
return dateienListe;
}
public void setDateienListe(List<Datei> dateienListe) {
this.dateienListe = dateienListe;
}
public Benutzer() {
// TODO Auto-generated constructor stub
}
}