JPA keine shared primary key

lusitano

Aktives Mitglied
Hallo Leute,
kann ir mal jemand meinen Fehler zeigen? In einer OneToOne beziehung sollen sich die Entitys den primary key teilen. Leider Bekomme ich nur folgende Fehlermeldung. Mir ist bewusst das ich den PK aus anwender als PK in anwenderRechte verwenden muss. Nur finde ich die Lösung nicht .
Schon mal Danke für eure Meinung.

Javascript:
Caused by: org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one property [objects.anwender.AnwenderRechte.anwender]
    at org.hibernate.id.ForeignGenerator.generate(ForeignGenerator.java:90)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:120)
    at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:192)
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:135)
    at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:118)
    at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:726)
    ... 75 more

Klasse Anwender ohne getter setter
Code:
@Entity
@Table(name = "anwender")
public class Anwender implements Serializable {

    
    /**
     *
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "anwender_generator") // PrimaryKey wird durch den generator erstellt
    @SequenceGenerator(name = "anwender_generator", sequenceName = "anwender_seq", allocationSize = 10) // anwender_generator erhält Tabell anwender_seq jeder Eintrag wird um +10 erhöht
    @Column(name = "anwenderID_PK", updatable = false, nullable = false) // Tabellename ist nicht updatebar und darf nicht null beinhalten
    private int anwenderID_PK;
    
    private String anwenderBenutzerKennung;
    private String anwenderVorname;
    private String anwenderNachname;
    private String anwenderBenutzerRolle;
    private String anwenderPasswort;
    private boolean anwenderIstAngemeldet;
    
    
    @OneToOne(mappedBy = "anwender", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private AnwenderRechte anwenderRechte;
    
    public Anwender(String anwenderBenutzerKennung, String anwenderVorname, String anwenderNachname,
            String anwenderBenutzerRolle, String anwenderPasswort, boolean anwenderIstAngemeldet, AnwenderRechte anwenderRechte) {
        this.anwenderBenutzerKennung = anwenderBenutzerKennung;
        this.anwenderVorname = anwenderVorname;
        this.anwenderNachname = anwenderNachname;
        this.anwenderBenutzerRolle = anwenderBenutzerRolle;
        this.anwenderPasswort = anwenderPasswort;
        this.anwenderIstAngemeldet = anwenderIstAngemeldet;
        this.anwenderRechte = anwenderRechte;
    }

    public Anwender() {
    }

Klasse AnwenderRechte ohne getter setter

Code:
@Entity
@Table(name = "anwenderRechte")
public class AnwenderRechte implements Serializable {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    @Id
    private int anwenderRechteID_PK;

    private boolean darfErstellen;
    private boolean darfLoeschen;
    private boolean darfUpdaten;
    private boolean darfLesen;

    private int anwenderID_FK;

    @OneToOne
    @MapsId
    private Anwender anwender;

    public AnwenderRechte(boolean darfErstellen, boolean darfLoeschen, boolean darfUpdaten, boolean darfLesen) {
        this.darfErstellen = darfErstellen;
        this.darfLoeschen = darfLoeschen;
        this.darfUpdaten = darfUpdaten;
        this.darfLesen = darfLesen;
    }

    public AnwenderRechte() {
    }

und den Button speichern in dem das ganze gespeichert wird.

Code:
AnwenderDAOImpl anwenderDAOImpl = new AnwenderDAOImpl();
        anwenderDAOImpl.AnwenderDAOImpl();
        AnwenderRechte anwenderRechte = new AnwenderRechte(true, true, true, true);
        
        Anwender anwender = new Anwender(benutzerKennung, vorname, nachname, benutzerRolle, passwort, true, anwenderRechte);
        anwender.getAnwenderRechte().setAnwenderRechteID_PK(anwender.getAnwenderID_PK());
 

lusitano

Aktives Mitglied
Leider nein.
Ich hab das jetzt noch ausprobiert.

Code:
    AnwenderDAOImpl anwenderDAOImpl = new AnwenderDAOImpl();
        anwenderDAOImpl.AnwenderDAOImpl();
      
        AnwenderRechte anwenderRechte = new AnwenderRechte();
        anwenderRechte.setDarfErstellen(true);
        anwenderRechte.setDarfLesen(true);
        anwenderRechte.setDarfLoeschen(true);
        anwenderRechte.setDarfUpdaten(true);
        
        Anwender anwender = new Anwender();
        anwenderRechte.setAnwenderRechteID_PK(anwender.getAnwenderID_PK());
        anwender.setAnwenderRechte(anwenderRechte); // Editiert
        anwender.setAnwenderBenutzerKennung(benutzerKennung);
        anwender.setAnwenderBenutzerRolle(benutzerRolle);
        anwender.setAnwenderIstAngemeldet(true);
        anwender.setAnwenderNachname(nachname);
        anwender.setAnwenderPasswort(passwort);
        anwender.setAnwenderVorname(vorname);
        
        
        anwenderDAOImpl.createAnweder(anwender);

Das funktioniert leider auch nicht.

Code:
Caused by: org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one property [objects.anwender.AnwenderRechte.anwender]
    at org.hibernate.id.ForeignGenerator.generate(ForeignGenerator.java:90)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:120)
    at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:192)
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:135)
    at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:118)
    at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:726)
    ... 75 more
 

lusitano

Aktives Mitglied
Auch nicht.
Code:
        AnwenderDAOImpl anwenderDAOImpl = new AnwenderDAOImpl();
        anwenderDAOImpl.AnwenderDAOImpl();
      
        AnwenderRechte anwenderRechte = new AnwenderRechte();
        anwenderRechte.setDarfErstellen(true);
        anwenderRechte.setDarfLesen(true);
        anwenderRechte.setDarfLoeschen(true);
        anwenderRechte.setDarfUpdaten(true);
        
        Anwender anwender = new Anwender();
        anwender.setAnwenderRechte(anwenderRechte);
        anwender.setAnwenderBenutzerKennung(benutzerKennung);
        anwender.setAnwenderBenutzerRolle(benutzerRolle);
        anwender.setAnwenderIstAngemeldet(true);
        anwender.setAnwenderNachname(nachname);
        anwender.setAnwenderPasswort(passwort);
        anwender.setAnwenderVorname(vorname);
        
        
        anwenderDAOImpl.createAnweder(anwender);
Fehlermeldung weiterhin.

Code:
Caused by: org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one property [objects.anwender.AnwenderRechte.anwender]
    at org.hibernate.id.ForeignGenerator.generate(ForeignGenerator.java:90)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:120)
    at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:192)
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:135)
    at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:118)
    at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:726)
    ... 75 more


und da gehen mir auch schon die Ideen aus. Darauf erstmal ne Kippe.
 

lusitano

Aktives Mitglied
So. Ich hab jetzt den Anwender in die DB gespeichert (ohne anwenderRrechte) dann den wieder aus der DB geholt und danach die anwenderRrechte in den Anwender.
Es funktioniert nicht.
Aber das ist das Resultat.
Er schreibt mir sehr wohl den Anwender in die DB. 12738
wohl aber keine anwenderRechte

12739

Code zum erstellen der Objekte,
Code:
  AnwenderRechte anwenderRechte = new AnwenderRechte(true, true, true, true);
        Anwender anwender = new Anwender();
          anwender.setAnwenderBenutzerKennung(benutzerKennung);
          anwender.setAnwenderBenutzerRolle(benutzerRolle);
          anwender.setAnwenderIstAngemeldet(true);
          anwender.setAnwenderNachname(nachname);
          anwender.setAnwenderPasswort(passwort);
          anwender.setAnwenderVorname(vorname);
      
          anwenderDAOImpl.testCreateAnwender(anwender, anwenderRechte);
code zum speichern

Code:
em.getTransaction().begin();
        em.persist(anwender);
        em.getTransaction().commit();
        
        Query query = em.createQuery("Select anwender from Anwender anwender");

        Collection<Anwender> anwenderCollection;

        anwenderCollection = (Collection<Anwender>) query.getResultList();
        
        List<Anwender> anwenderListe = (List<Anwender>) anwenderCollection;
        
        Anwender anwenderNeu =  new Anwender();
        
        for (int i = 0; i < anwenderListe.size(); i++) {
            anwenderNeu = anwenderListe.get(i);
        }
        
        anwenderNeu.setAnwenderRechte(anwenderRechte);
        
        em.getTransaction();
        em.persist(anwenderNeu);
        em.getTransaction().commit();
 

mihe7

Top Contributor
Du sollst ja erst nur den Anwender speichern und dann die Rechte setzen und anschließend den Anwender updaten. Hintergrund: die Persist-Kaskade dürfte dafür sorgen, dass beim persist eines Anwenders versucht wird, erstmal die Rechte zu persistieren. Das würde aber voraussetzen, dass der Anwender eine ID hat, was zu dem Zeitpunkt noch nicht der Fall ist. Also: erstmal Anwender persistieren - ohne Rechte - dann hat er eine ID, dann Rechte setzen und Anwender updaten.
 

lusitano

Aktives Mitglied
Ok, Ich mach das jetzt morgen, für heute reicht es mir.
Schreib dir hier morgen die Ergebnisse rein. In der Zeit werde ich noch mal bissel nachlesen.Das kann eigentlich keine Lösung sein das man zuerst die Elternklasse persistieren muss. (meine Bescheidene Meinung.)

Trotzdem Danke ich dir für die heutige Hilfe und die Ausdauer hier am Ball zu bleiben.
70c476d84935edc8c75d5c2685ad1cf1.jpg
 

lusitano

Aktives Mitglied
.... eigentlich wollte ich ja für heute Schluss machen. Aber wie es halt so mal ist, ne. ....
Ich hab es und es läuft.
Wobei bestimmt man es noch etwas optimieren kann.
geändert habe ich folgendes
Klasse anwender
Code:
@JoinColumn(name = "anwenderRechteID_PK", nullable = false)  // JoinColumn wurde hinzugefügt
    private AnwenderRechte anwenderRechte;

Klasse anwenderRechte

Code:
@OneToOne(fetch = FetchType.LAZY, mappedBy = "anwenderRechte") // mappedBy  hinzugefügt
    private Anwender anwender;

aber das wohl wichtigste (so denke ich)
Klasse anwenderRechte
Code:
public Anwender getAnwender() {
        return anwender;
    }

    public void setAnwender(Anwender anwender) {
        this.anwender = anwender;
    }
um auf private Anwender anwender zugreifen zu können den....
man muss wohl
sowohl der Kindsklasse
Code:
 anwenderRechte.setAnwender(anwender);
die Elternklasse mitgeben. Also auch
Code:
 anwender.setAnwenderRechte(anwenderRechte);
umgekehrt

Das Ergebnis ist dann 12741 12742


Nochmal Danke an @mihe7 für die Mühe und Hilfe
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Kann keine Labels erstellen, was ist hier syntaktisch falsch Allgemeine Java-Themen 5
berserkerdq2 Labels in IJVM sind keine lokalen Variablen oder? Allgemeine Java-Themen 2
O Warum kann ich so keine Elemente löschen und erhalte einen IllegalStateException? Allgemeine Java-Themen 4
pkm javax.script.ScriptEngineManager gibt mir keine Engine Allgemeine Java-Themen 4
N iText keine Sonderzeichen und Umlaute unter Windows Allgemeine Java-Themen 13
Tobero Eclipse Runnable jar exportiert keine Textures? Allgemeine Java-Themen 12
S createTempFile erstellt keine temporäre Datei Allgemeine Java-Themen 13
O xlsx Datei auslesen mit POI Apache liest keine LEERZELLEN Allgemeine Java-Themen 6
C javax.mail.Message message.setreplyto() null setzen (keine replyto Adresse) Allgemeine Java-Themen 25
Thallius Keine Ahnung Allgemeine Java-Themen 15
M WSDL: Doppelte Typenames (Keine Verwendung möglich) Allgemeine Java-Themen 5
M Keine weitere Eingabe in der Main möglich. Eventueller Ansatz über while. Allgemeine Java-Themen 8
P Datenbank-MiniGUI fügt keine Daten ein Allgemeine Java-Themen 4
T Input/Output Konsole gibt trotz printf keine Umlaute aus Allgemeine Java-Themen 17
N Warum habe ich keine Spaltenüberschriften? Allgemeine Java-Themen 6
W Thread sleep 30 sekunden - wenn keine Antwort bis dahin neu senden Allgemeine Java-Themen 2
Thallius Bekomme keine Exception mit Stacktrace mehr. Was habe ich getan? Allgemeine Java-Themen 13
H jid3lib nach schreiben keine Tags im Folder angezeigt Allgemeine Java-Themen 1
0 Code startet nicht (Keine Warnung/Fehlermeldung) Allgemeine Java-Themen 4
A Swing FileWriter schreibt keine Daten in Datei Allgemeine Java-Themen 13
J Programm meldet "Keine Rückmeldung" nach Verbindung zum Server Allgemeine Java-Themen 4
Z Eclipse hängt sich alle paar Sekunden auf (Keine Rückmeldung). Allgemeine Java-Themen 4
Bluedaishi Input/Output Bluetooth Bondrucker MZ220 keine Verbindung Allgemeine Java-Themen 0
F Cardlayout prüfen ob schon vorhanden, keine doppelten Allgemeine Java-Themen 3
R Es gibt keine dummen Fragen (hab ich mal gehört) Allgemeine Java-Themen 11
M Eclipse Keine Ausgabe mehr bei Fehlern Allgemeine Java-Themen 3
S Java Applet Crash - Keine Exception Allgemeine Java-Themen 8
V Files mit Umlauten ergeben keine Größe Allgemeine Java-Themen 9
S Bekomme mit Scanner und URL keine Html-Seite ausgelesen Allgemeine Java-Themen 3
127.0.0.1 Subversion neues SVN Projekt, keine Main gefunden ?! Allgemeine Java-Themen 7
A Collections HashMap.containsKey findet keine immutablen Objekte Allgemeine Java-Themen 3
M keine Bilder in .jar-Datei (java) Allgemeine Java-Themen 23
D Chat - keine Schrift sichtbar Allgemeine Java-Themen 4
J Eclipse Elipse gibt mir keine Vorschläge mehr :( Allgemeine Java-Themen 6
S Objekte die Objekte enthalten: Keine Vererbung Allgemeine Java-Themen 4
S Tomcat java.util.logging - keine Logs Allgemeine Java-Themen 12
Guybrush Threepwood Warten, bis keine Taste gedrückt Allgemeine Java-Themen 11
S Keine NullPointerExceptions in nebenläufigen Threads Allgemeine Java-Themen 21
T Batch-File / keine Verbindung zur DerbyDB Allgemeine Java-Themen 3
O Zugriff auf Serielle Schnittstelle - Keine Ports gefunden. Allgemeine Java-Themen 8
X Warum kann ich keine ZIP Datein mit renameto() in was anderes benennen? Allgemeine Java-Themen 13
B warum keine nested blocks Allgemeine Java-Themen 2
GilbertGrape Jetty-Dienst startet keine Programme mit Oberfläche Allgemeine Java-Themen 2
S Keine Exception-Warning in Eclipse Allgemeine Java-Themen 3
D Warum keine Mehrfachvererbung? Allgemeine Java-Themen 5
tfa Keine Closures in Java 7 (?) Allgemeine Java-Themen 17
J Probleme wenn man keine serialVersionUID definiert? Allgemeine Java-Themen 27
G PrintWriter in .jar erstellt keine Datei Allgemeine Java-Themen 4
F Kann man keine Arrays von generischen Typen erstellen? Allgemeine Java-Themen 2
G Javadoc generiert keine Links zu java.lang Klassen? Allgemeine Java-Themen 4
A ArrayListe :Doppelte entfernen -> keine Referenzen Allgemeine Java-Themen 26
ARadauer Random keine Zahlen doppelt Allgemeine Java-Themen 4
T Wieso erfolgt keine Ausgabe. /Excel Allgemeine Java-Themen 19
F GregorianCalendar wirft keine Fehler bei z.b. Monat 17 Allgemeine Java-Themen 3
G Jarfile gibt keine Textnachrichten aus Allgemeine Java-Themen 2
J java vnc client verbessern: KeyEvent.VK_ALT keine Wirkung? Allgemeine Java-Themen 12
J jar-Datei enthält keine Main-Class Allgemeine Java-Themen 22
N Keine Klassen startbar/mit Abhängigkeiten erstellbar Allgemeine Java-Themen 2
WMaerz Der neue JDK 6 enthält keine javac.exe, tool.jar usw. Allgemeine Java-Themen 6
P Webhosting-Paket unterstützt nur .war Dateien keine jsp Allgemeine Java-Themen 4
A Kann keine neue Klasse erstellen. Allgemeine Java-Themen 3
D TextPane nach Laden keine Styles Allgemeine Java-Themen 2
A JSP include - keine Fehlermeldung Allgemeine Java-Themen 2
H Vektoren nehmen keine neuen Werte an Allgemeine Java-Themen 5
N Applet übernimmt keine Änderungen Allgemeine Java-Themen 13
C Vier Stellen Keine Doppelt (Zufall) Allgemeine Java-Themen 20
N Euklidischer Algorithmus in Java und keine Terminierung. Allgemeine Java-Themen 7
C Java zeigt keine Fensterinhalte Allgemeine Java-Themen 3
G Leere Fenster (Keine Schrift, Reiter/ Buttons) bei Java Allgemeine Java-Themen 5
G woher installiertes JDK? (keine Adminrechte) Allgemeine Java-Themen 3
R keine sqrt methode für bigintegers? Allgemeine Java-Themen 14
D NullPointerException wo keine sein sollte. Allgemeine Java-Themen 2
0 Keine clone-Methode für BigDecimal und BigInteger? Allgemeine Java-Themen 3
C Sound: Keine Line gefunden. Zu großer internal buffer? Allgemeine Java-Themen 3
Y Comm-API findet keine Ports Allgemeine Java-Themen 5
B Keine Musik bei Applikation Allgemeine Java-Themen 9
H Kann keine Zahlen von Buchstaben unterscheiden Allgemeine Java-Themen 4
V Javadoc ertellt keine korrekten links Allgemeine Java-Themen 3
E Java Shared Memory? Allgemeine Java-Themen 6
F Java Native/Shared Library (.so) laden macht Probleme Allgemeine Java-Themen 3
kaoZ Best Practice Shared Actions , Referenzen in Gui halten ? Allgemeine Java-Themen 25
G JNI Shared Object Allgemeine Java-Themen 10
J Zugriff auf Dateien auf einem shared Folder? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben