Betr. JPA

Bisher hat der Umbau der vorhanden Klassen hinsichtlich der Nutzung von JPA promblemloser funktioniert als gedacht. Bisher versuche ich halt nur, das User Objekt aus der Tabelle User auszulesen.
Letztendlich muss ich aber mein bisheriges Konzept soweit umstellen, dass ich die Validierung von Eingaben aus der User Klasse in eine sperate Application Klasse auslagere.
Allen anschein nach klappt das Laden der User Klasse mit Hilfe eines EntityManagers fehlerlos, allerdings scheint es da an einigen Stellen noch zu Problemen zu kommen.
Nach der Überarbeitung sieht die User Klasse nun wie folgt aus:

Die Methoden isLogin and isWithName werden dann wahrscheinlich auch ausgelagert werden müssen. Das Attribut error wird wohl einer Fehlerbehandlungsklasse weichen und in Folge dessen als Sammlung von Exceptions implimentiert werden.
Als Primary Key habe ich mich jetzt für das Attribut Name entschieden, da es scheinbar nur möglich ist, die find Methode des EntityManagers anhand eines Primary keys zu nutzen und ich aller Vorraussicht nach eher nach Namen als nach IDs suchen werde.
Das Laden des Objektes passiert nun in einer neuen Klasse Application:

Leider wird mir bei der Methode showID() eine NullPointerException geworfen, die ich noch nicht ganz nachvollziehen kann :-/. Letztendlich wird mir JPA aber denke ich eine Menge an Arbeit abnehmen, sobald es erstmal stabil läuft.
Bei Sun habe ich allerdings noch ein Beispiel gefunden, was wie perfekt für mich zu sein scheint, weil es schon ziemlich viel von dem behandelt, was ich eigentlich machen möchte [1]

3 Replies to “Betr. JPA”

  1. Es wäre gut, NPE und Quelltext zu sehen.
    Hast Du etwa keinen Datensatz in der DB, der zur Anfrage passt?
    Tritt die NPE etwa schon im Konstruktor auf, da keine PersistenceUnit konfiguriert ist, oder kein passender Provider im Classpath hinterlegt ist?
    Gruß,
    Phillip

  2. Also es lag tatsächlich daran, dass in der Tabelle kein Eintrag mehr vorhanden war, weil JPA meinte, mal eben meine komplette Tabelle neu schreiben zu müssen. Jetzt funktioniert alles, da ich jetzt erst manuall ein neues User Objekt in die Tabelle einfüge.
    Was jetzt noch nicht funktioniert ist, dass die ID automatisch um eins erhöht wird (oder beim ersten Eintrag auf 1 gesetzt wird). Ob ich das jetzt der Datenbank überlasse oder ob es da etwas eine Funktion vom Entity Manager gibt, muss ich mal sehen.

  3. Halo,
    @Id
    @javax.persistence.GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = “id”, nullable = false)
    private Integer id;
    damit wird ID um eins hochgezählt!
    mfg

Leave a Reply