JSF - 从Oracle数据库中删除时出现异常

时间:2015-07-25 12:20:57

标签: oracle managed-bean

我在删除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
}

}

0 个答案:

没有答案