hispeedsurfer
Mitglied
Hallo,
bin am verzweifeln. Ich habe zwei(drei) Entity-Beans: Specialrelease und Request(Recipient).
In Specialrelease habe ich folgende Beziehung
das Gegenstück dazu, Request
und folgende Action
In einer Oberklasse der Action wird gespeichert
Und hier der Error
Verwende ich nun im Specialrelease
wird die Speicherung ohne Probleme durchgeführt. Problem hierbei ist nur, das ein neuer Request auch ohne explizites speichern von Hibernate in der Datenbank gespeichert wird.
Sprich: Ich habe einen Specialrelease-Editor mit den Möglichkeiten zu speichern, abzubrechen und neue Empfänger(Recipient) hinzuzufügen.
Füge ich nun im Falle der letzteren Konfiguration einen neuen Recipient hinzu und gehe danach auf "Abbrechen" ist der neue Request bereits in der Datenbank gespeichert worden.
Eine Möglichkeit wäre natürlich die speichern-Methode so zu erweitern dass der Request im Falle der ersten Konfiguration zuvor vom Entitymanger persist gemacht wird. Dies ist mir allerdings nicht recht, da die speichern-Methode von vielen anderen Klassen auch verwendet wird.
Ich hoffe ich konnte mich verständlich ausdrücken und noch mehr hoffe ich, dass mir jemand weiterhelfen kann.
Gruß
Andreas
bin am verzweifeln. Ich habe zwei(drei) Entity-Beans: Specialrelease und Request(Recipient).
In Specialrelease habe ich folgende Beziehung
Java:
@OneToMany(mappedBy="specialrelease", cascade=CascadeType.REMOVE)
private List<Request> requests;
das Gegenstück dazu, Request
Java:
@ManyToOne
@JoinColumn(name="specialrelease_id")
private SpecialRelease specialrelease;
und folgende Action
Java:
public void addRecipient(Recipient rec){
List<Request> requests = specialrelease.getRequests();
boolean containRecipient = false;
for(Request q:requests){
boolean temp = q.getRecipient().equals(rec);
if(temp){
containRecipient = true;
}
}
if(!containRecipient){
Request e = new Request();
String uniqueId = e.getInternalUUID();
e.setUniqueRequestId(uniqueId);
e.setRecipient(rec);
e.setRequestDate(new GregorianCalendar());
e.setSpecialrelease(specialrelease);
requests.add(e);
specialrelease.setStatus(SpecialRelease.Status.NOTRELEASED);
}else{
/**
* Message
*/
}
}
In einer Oberklasse der Action wird gespeichert
Java:
@End
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void save(){
T entity = getEntity();
preProcedure();
try{
if(state == NEW || state == CREATED){
em.persist(entity);
}
if(state == MODIFIED){
em.merge(entity);
}
em.flush();
}catch(Exception ex){
ex.printStackTrace();
}
}
Und hier der Error
Code:
java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: de.bosch.ecp.model.Request
Verwende ich nun im Specialrelease
Java:
@OneToMany(mappedBy="specialrelease", cascade=CascadeType.ALL)
private List<Request> requests;
wird die Speicherung ohne Probleme durchgeführt. Problem hierbei ist nur, das ein neuer Request auch ohne explizites speichern von Hibernate in der Datenbank gespeichert wird.
Sprich: Ich habe einen Specialrelease-Editor mit den Möglichkeiten zu speichern, abzubrechen und neue Empfänger(Recipient) hinzuzufügen.
Füge ich nun im Falle der letzteren Konfiguration einen neuen Recipient hinzu und gehe danach auf "Abbrechen" ist der neue Request bereits in der Datenbank gespeichert worden.
Eine Möglichkeit wäre natürlich die speichern-Methode so zu erweitern dass der Request im Falle der ersten Konfiguration zuvor vom Entitymanger persist gemacht wird. Dies ist mir allerdings nicht recht, da die speichern-Methode von vielen anderen Klassen auch verwendet wird.
Ich hoffe ich konnte mich verständlich ausdrücken und noch mehr hoffe ich, dass mir jemand weiterhelfen kann.
Gruß
Andreas