Hallo !!!
Ich habe zwei Klassen Terminal und Measurement.
Die Beziehung ist 1...n (bi-direktional).
In meiner Datenbank befindet sich genau ein Terminal und genau eine, diesem Terminal zugeordnete, Measurement.
Nun möchte ich eine neue Measurement zu dem bestehenden Terminal hinzufügen.
Deswegen lasse ich mir zuerst über eine query das Terminal ausgeben. Dann weise ich der neuen Measurement das ausgegebene Terminal zu und persiste sie.
Und nun passiert, was nicht passieren soll. Es wird in der Datenbank zu dem bereits bestehenden noch ein neues Terminal erstellt, wobei sich die beiden nur im Primärschlüssel unterscheiden.
Am Ende habe ich also 2 Terminals denen jeweils eine Measurement zugeordnet ist.
Wie bekomme ich das nun hin, dass ich am Ende 1 Terminal und 2 Measurements habe?
Über Hilfe würd ich mich riesig freuen!!!
Hier noch die passenden Codeausschnitte:
Klasse: Terminal
Klasse: Measurement
...
EntityManager
Ich habe zwei Klassen Terminal und Measurement.
Die Beziehung ist 1...n (bi-direktional).
In meiner Datenbank befindet sich genau ein Terminal und genau eine, diesem Terminal zugeordnete, Measurement.
Nun möchte ich eine neue Measurement zu dem bestehenden Terminal hinzufügen.
Deswegen lasse ich mir zuerst über eine query das Terminal ausgeben. Dann weise ich der neuen Measurement das ausgegebene Terminal zu und persiste sie.
Und nun passiert, was nicht passieren soll. Es wird in der Datenbank zu dem bereits bestehenden noch ein neues Terminal erstellt, wobei sich die beiden nur im Primärschlüssel unterscheiden.
Am Ende habe ich also 2 Terminals denen jeweils eine Measurement zugeordnet ist.
Wie bekomme ich das nun hin, dass ich am Ende 1 Terminal und 2 Measurements habe?
Über Hilfe würd ich mich riesig freuen!!!
Hier noch die passenden Codeausschnitte:
Klasse: Terminal
Java:
@Entity
public class Terminal implements Serializable {
...
@Id
@GeneratedValue (strategy=SEQUENCE, generator = "IO_MRID")
@SequenceGenerator(allocationSize = 1, name = "IO_MRID", sequenceName = "MRID_SEQ")
private Integer mRID;
...
@OneToMany (cascade=CascadeType.ALL, targetEntity = Measurement.class , mappedBy = "Terminal")
private List<Measurement> Measurements = new Vector<Measurement>();
...
...
Java:
@Entity
public class Measurement implements Serializable {
...
@Id
@GeneratedValue (strategy=SEQUENCE, generator = "IO_MRID")
@SequenceGenerator(allocationSize = 1, name = "IO_MRID", sequenceName = "MRID_SEQ")
private Integer mRID;
...
@JoinColumn(name = "Terminal_CID")
@ManyToOne (cascade=CascadeType.ALL, targetEntity = Terminal.class)
private Terminal Terminal;
...
Java:
...
EntityManagerFactory emf = new JPARessourceBean().getEMF();
EntityManager em = (EntityManager) emf.createEntityManager();
Measurement meas2 = new Measurement();
Terminal terminal;
Query query = em.createQuery("SELECT t FROM Terminal t");
terminal = query.getResultList().get(0); //gibt nur eins
em.getTransaction().begin();
meas2.setTerminal(terminal);
em.persist(meas2);
em.getTransaction().commit();
em.close();
emf.close();
...