Guten Tag zusammen,
ich sitze zur Zeit mit meinem SW Projekt Team (Studium) vor einem scheinbar unlösbaren Problem.
Wir schreiben ein Programm für ein imaginäres Surfcenter. Es soll möglich sein Gegenstände zu verleihen (Stichwort Ausleihe anlegen) und wieder zurück zu nehmen -> Rückgabe anlegen.
Wir arbeiten mit Java 12, Eclipse und den o.g. Werkzeugen. Es funktioniert auch eigentlich bereits fast alles nur eine Sache ist leider etwas schwierig. Wenn wir in einer Sitzung im Programm eine Ausleihe anlegen, dann auf "Bestätigen" drücken, soll das Programm quasi wieder zurück in die Ausleihverwaltung springen und die dortige JTable die gerade angelegte Ausleihe anzeigen. Das funktioniert auch soweit. Aber man kann in der selben Sitzung leider keine Rückgabe zu dieser gerade erzeugten Ausleihe anlegen, er zieht sich irgendwie die Daten nicht in das Rückgabe Anlegen Fenster (wohlgemerkt, die ID der Ausleihe, die in ein JLabel geschrieben wird zieht er sich aber trotzdem und zeigt diese korrekt an). Wenn wir das Programm beenden und wieder in die Ausleihverwaltung gehen, kann ganz normal eine Rückgabe zu dieser Ausleihe erstellt werden. Das hat also höchstwahrscheinlich was mit dem Thread (wovon ich leider nicht viel Ahnung habe) zu tun.
Wir arbeiten mit EntityManagern, die wir bei jeder DB Operation im Programm erstellen und zum Schluss ein getTransaction().commit; tätigen.
[CODE lang="java" title="Methode zur Ausleiherstellung"]public void generiereAusleihe() {
long diff = planRueckgabeDatum.getTime()/1000/60-ausleihDatum.getTime()/1000/60;
//Stunden
double stundenFaktor = diff/60;
ausleihe = new Ausleihe();
Kunde kunde = sucheKunde(Long.parseLong(kundenNr));
for (Inventar inv : this.inventare) {
inv.setStatus("verliehen");
AusleihPosition p = new AusleihPosition();
p.setAuftrag(ausleihe);
p.setInventar(inv);
p.setSchaden(false);
p.setKaufwunsch(false);
//Preis pro Position
p.setPreis(p.getInventar().getPreiskategorie().getPreisProZE()*stundenFaktor);
DatabaseConnector.getEntityManager().persist(p);
}
ausleihe.setAuftragsart("Ausleihe");
ausleihe.setKunde(kunde);
ausleihe.setMitarbeiter(mitarbeiter);
ausleihe.setStandort(ctrl.getCtrl().getStandort());
ausleihe.setErstellungsdatum(erstellungsdatum);
ausleihe.setAusleihdatum(ausleihDatum);
ausleihe.setPlanRueckgabedatum(planRueckgabeDatum);
//Gesamtpreis
double gesamtpreis=0.00;
for(Inventar i:inventare) {
gesamtpreis = gesamtpreis+ i.getPreiskategorie().getPreisProZE()*stundenFaktor;
}
ausleihe.setPreis(gesamtpreis);
// DatabaseConnector.getEntityManager().persist(inventar1);
DatabaseConnector.getEntityManager().getTransaction().begin();
DatabaseConnector.getEntityManager().persist(ausleihe);
// Wird ben�tigt um Tabelle in GUI upzudaten
ctrl.getAuftragsListe().add(ausleihe);
ctrl.getAusleihverwaltungTablemodel().fireTableDataChanged();
DatabaseConnector.getEntityManager().getTransaction().commit();
}[/CODE]
[CODE lang="java" title="Erstellung der Ausleihverwaltung"]public void ermittleAusleihen () {
EntityManager em = DatabaseConnector.getEntityManager();
Query query = em.createQuery("Select B FROM Auftrag B WHERE B.disc='Ausleihe'");
auftragsListe = query.getResultList();
this.tablemodel = new AusleihverwaltungTableModel(auftragsListe);
}[/CODE]
[CODE lang="java" title="Ermittle Ausleihen aus der Ausleihverwaltung"] public void ermittleAusleihe(long id) {
EntityManager em = DatabaseConnector.getEntityManager();
Ausleihe result = em.find(Ausleihe.class,id);
this.positionen = result.getPositions();
konvertiereListe();
this.rueckgabeTable = new RueckgabeTableModel(auslPositionen);
this.ausleihe = result;
}[/CODE]
Hat jemand vielleicht einen Ansatz wo wir suchen sollten?
Danke schon mal!
ich sitze zur Zeit mit meinem SW Projekt Team (Studium) vor einem scheinbar unlösbaren Problem.
Wir schreiben ein Programm für ein imaginäres Surfcenter. Es soll möglich sein Gegenstände zu verleihen (Stichwort Ausleihe anlegen) und wieder zurück zu nehmen -> Rückgabe anlegen.
Wir arbeiten mit Java 12, Eclipse und den o.g. Werkzeugen. Es funktioniert auch eigentlich bereits fast alles nur eine Sache ist leider etwas schwierig. Wenn wir in einer Sitzung im Programm eine Ausleihe anlegen, dann auf "Bestätigen" drücken, soll das Programm quasi wieder zurück in die Ausleihverwaltung springen und die dortige JTable die gerade angelegte Ausleihe anzeigen. Das funktioniert auch soweit. Aber man kann in der selben Sitzung leider keine Rückgabe zu dieser gerade erzeugten Ausleihe anlegen, er zieht sich irgendwie die Daten nicht in das Rückgabe Anlegen Fenster (wohlgemerkt, die ID der Ausleihe, die in ein JLabel geschrieben wird zieht er sich aber trotzdem und zeigt diese korrekt an). Wenn wir das Programm beenden und wieder in die Ausleihverwaltung gehen, kann ganz normal eine Rückgabe zu dieser Ausleihe erstellt werden. Das hat also höchstwahrscheinlich was mit dem Thread (wovon ich leider nicht viel Ahnung habe) zu tun.
Wir arbeiten mit EntityManagern, die wir bei jeder DB Operation im Programm erstellen und zum Schluss ein getTransaction().commit; tätigen.
[CODE lang="java" title="Methode zur Ausleiherstellung"]public void generiereAusleihe() {
long diff = planRueckgabeDatum.getTime()/1000/60-ausleihDatum.getTime()/1000/60;
//Stunden
double stundenFaktor = diff/60;
ausleihe = new Ausleihe();
Kunde kunde = sucheKunde(Long.parseLong(kundenNr));
for (Inventar inv : this.inventare) {
inv.setStatus("verliehen");
AusleihPosition p = new AusleihPosition();
p.setAuftrag(ausleihe);
p.setInventar(inv);
p.setSchaden(false);
p.setKaufwunsch(false);
//Preis pro Position
p.setPreis(p.getInventar().getPreiskategorie().getPreisProZE()*stundenFaktor);
DatabaseConnector.getEntityManager().persist(p);
}
ausleihe.setAuftragsart("Ausleihe");
ausleihe.setKunde(kunde);
ausleihe.setMitarbeiter(mitarbeiter);
ausleihe.setStandort(ctrl.getCtrl().getStandort());
ausleihe.setErstellungsdatum(erstellungsdatum);
ausleihe.setAusleihdatum(ausleihDatum);
ausleihe.setPlanRueckgabedatum(planRueckgabeDatum);
//Gesamtpreis
double gesamtpreis=0.00;
for(Inventar i:inventare) {
gesamtpreis = gesamtpreis+ i.getPreiskategorie().getPreisProZE()*stundenFaktor;
}
ausleihe.setPreis(gesamtpreis);
// DatabaseConnector.getEntityManager().persist(inventar1);
DatabaseConnector.getEntityManager().getTransaction().begin();
DatabaseConnector.getEntityManager().persist(ausleihe);
// Wird ben�tigt um Tabelle in GUI upzudaten
ctrl.getAuftragsListe().add(ausleihe);
ctrl.getAusleihverwaltungTablemodel().fireTableDataChanged();
DatabaseConnector.getEntityManager().getTransaction().commit();
}[/CODE]
[CODE lang="java" title="Erstellung der Ausleihverwaltung"]public void ermittleAusleihen () {
EntityManager em = DatabaseConnector.getEntityManager();
Query query = em.createQuery("Select B FROM Auftrag B WHERE B.disc='Ausleihe'");
auftragsListe = query.getResultList();
this.tablemodel = new AusleihverwaltungTableModel(auftragsListe);
}[/CODE]
[CODE lang="java" title="Ermittle Ausleihen aus der Ausleihverwaltung"] public void ermittleAusleihe(long id) {
EntityManager em = DatabaseConnector.getEntityManager();
Ausleihe result = em.find(Ausleihe.class,id);
this.positionen = result.getPositions();
konvertiereListe();
this.rueckgabeTable = new RueckgabeTableModel(auslPositionen);
this.ausleihe = result;
}[/CODE]
Hat jemand vielleicht einen Ansatz wo wir suchen sollten?
Danke schon mal!