Hallo,
ich möchte gerade mit Hilfe von JPA eine Datenbankanwendung bauen. Ich bin noch nicht sonderlich konform mit Java, aber nach meinem Wissen sollte hier alles richtig sei. Ich habe hier eine Klasse Lehrer, die eine Tabelle in der DB darstellt, eine Klasse DB, die alles mit dem Entitymanager übernimmt und eine Main. Anfangs hatte ich versucht die Lehrer Klasse die DB Klasse erweitern zu lassen, doch das ging auch schief. Hier erstmal die Klassen:
Lehrer:
DB:
Main:
Bekomme jedesmal folgendes:
Warum? Kann ich den EntityManager nicht auslagern? Wäre es nicht nett, wenn die Lehrer Klasse direkt eine save()-Methode hätte, ohne, das ich das lehrer Objekt an die persist()-Methode übergeben muss?
ich möchte gerade mit Hilfe von JPA eine Datenbankanwendung bauen. Ich bin noch nicht sonderlich konform mit Java, aber nach meinem Wissen sollte hier alles richtig sei. Ich habe hier eine Klasse Lehrer, die eine Tabelle in der DB darstellt, eine Klasse DB, die alles mit dem Entitymanager übernimmt und eine Main. Anfangs hatte ich versucht die Lehrer Klasse die DB Klasse erweitern zu lassen, doch das ging auch schief. Hier erstmal die Klassen:
Lehrer:
Code:
package model;
import javax.persistence.*;
@Entity
@Table(schema="ae")
public class Lehrer {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
int lid;
String name;
String vorname;
String kurzform;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getVorname() {
return vorname;
}
public void setVorname(String vorname) {
this.vorname = vorname;
}
public String getKurzform() {
return kurzform;
}
public void setKurzform(String kurzform) {
this.kurzform = kurzform;
}
public int getLid() {
return lid;
}
// public Query fetchAll() {
// return em.createQuery("select l from Lehrer l");
// }
//
// public Query fetchRow(int id) {
// return em.createQuery("select l from Lehrer l where lid = " + id);
// }
}
DB:
Code:
package model;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class DB {
EntityManager em;
EntityManagerFactory factory;
public DB() {
// Create the Entity Manager
EntityManagerFactory factory = Persistence.createEntityManagerFactory("Stundenplanungsprogramm");
EntityManager em = factory.createEntityManager();
// Begin a new local transaction so that we can persist a new entity
em.getTransaction().begin();
}
protected void finalize() throws Throwable
{
// Commit the transaction, which will cause the entity to
// be stored in the database
em.getTransaction().commit();
// It is always good practice to close the EntityManager so that
// resources are conserved.
em.close();
factory.close();
}
public void save(Object obj) {
em.persist(obj);
}
}
Main:
Code:
import javax.persistence.*;
import model.*;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
DB db = new DB();
Lehrer lehrer = new Lehrer();
lehrer.setName("test4");
lehrer.setVorname("vortest4");
lehrer.setKurzform("kurztest4");
db.save(lehrer);
}
}
Bekomme jedesmal folgendes:
Exception in thread "main" java.lang.NullPointerException
at model.DB.save(DB.java:34)
at Main.main(Main.java:20)
Warum? Kann ich den EntityManager nicht auslagern? Wäre es nicht nett, wenn die Lehrer Klasse direkt eine save()-Methode hätte, ohne, das ich das lehrer Objekt an die persist()-Methode übergeben muss?