# JPA: NullPointerException nach persist



## tippex (12. Okt 2009)

Hallo zusammen,

ich habe eine 1:n Beziehung. Ein Artikel kann mehreren Assets zugeordnet sein. 

Leider erhalte ich nach persist oder update auf Assets eine NullPointerException, wenn ich den "Artikel"-Datensatz abrufen möchte.
Kann mir bitte jemand sagen was ich falsch mache?
Anbei mein Code.

Entity Artikel:

```
@Id
	private int artikel_id;

	@Column(unique=true)
	private String artikelnummer;
```
Entity Assets:

```
@Id
	private int asset_id;

	private String artikelnummer;	

	@ManyToOne
	@JoinColumn(name="artikelnummer",referencedColumnName="artikelnummer",unique=true, insertable=false, updatable=false)
	private Artikel artikel;
```
Folgender Code wirft eine NullPointerException:

```
EntityManager em = Persistence.createEntityManagerFactory("em").createEntityManager();

	em.getTransaction().begin();
		
	Artikel artikel = new Artikel();
	artikel.setArtikelnummer("123");
	em.persist(artikel);

	Assets asset = new Assets();
	asset.setArtikelnummer("123");
	em.persist(asset);
	
	em.flush();
        em.getTransaction().commit();

	Query query = em.createQuery("SELECT d FROM Assets d where d.artikelnummer = '123'");
	Assets ds = (Assets) query.getSingleResult();
	System.out.println(ds.getArtikel().getArtikelnummer());
```

Vielen Dank im Voraus.


----------



## peez (12. Okt 2009)

Wo genau bekommst du die Exception?
Ich fange auch gerade erst mit JPA an aber evt. irgendwas am Datenmodell? (wie sieht deine persistence.xml aus?) Ich an der Stelle würde einfach mal die DDL Creation einschalten und auf eine leere DB verweisen.
Danach würde ich die JoinColumn-Annotation auf das nötigste reduzieren und von klein auf hochgehen um zu sehen an welchem der Werte es liegt...


----------



## JanHH (13. Okt 2009)

Ich durchschau das nicht so ganz aber mir kommt das irgendwie etwas vermurkst vor. Du willst irgendwie den Artikel mittels des Strings artikelnummer mappen, gibst eine JoinColum mit einem Namen an, den in beiden Entitys jeweils eine Property mit dem Typ String hat. . Das mapping geschieht allerdings nicht über den Artikelnummer-String, sondern die Id, und das ist ja ein int. Das kann also irgendwie nicht funktionieren.

Ansonsten würde ich das sowieso eher so machen, dass die Artikel-Entity eine Liste der Assets hat, denen sie zugeordnet ist, und diese dann mit @OneToMany annotieren.


----------



## tippex (13. Okt 2009)

Das Datenmodell ist ok. Auf Artikel.Artikelnummer liegt ein Unique Constraint und auf Assets.Artikelnummer ein FK der diesen referenziert.

Die NullPointerException erscheint in Zeile 18:

```
System.out.println(ds.getArtikel().getArtikelnummer());
```

Ich muss dazu sagen: Wenn ich die Query erstmalig aufrufe funktioniert sie einwandfrei. Nachdem ich einen neuen Datensatz gespeichert habe, funktioniert die Verlinkung einfach nicht mehr, wobei der Datensatz jedoch korrekt in Assets abgelegt wird.


----------

