# Test H2-DB löscht nicht die IDs



## vanBraQ (13. Dez 2013)

Hi Leute,wir lernen im Unterricht derzeit Spring unter anderem auch Spring-Data.
Natürlich möchte ich meinen Code auch testen.
Im speziellen geht es hier um die Überprüfung ob die Repositorys richtig funktionieren.
Hier mal der Code eines Repository:


```
package at.fdisk.domain;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import at.fdisk.util.EnsureService;

@Entity
@Table(name = "ausbildung")
public class Ausbildung extends BasePersistable {

	private static final long serialVersionUID = 4601413807692718572L;
	
	@Size(max = 30)
	@NotNull
	@Column(name = "bezeichnung", nullable = false, length = 30)
	private String bezeichnung;
	
	@Size(max = 3)
	@NotNull
	@Column(name = "kurzbezeichnung", nullable = false, length = 3)
	private String kurzBezeichnung;
	
	@ManyToOne
	@Transient
	private Feuerwehr ort;
	
	@Temporal(TemporalType.DATE)
	@NotNull
	@Column(name = "startdatum", nullable = false)
	private Date startdatum;
	
	@Temporal(TemporalType.DATE)
	@NotNull
	@Column(name = "endatum", nullable = false)
	private Date enddatum;

	public Ausbildung(String bezeichnung, String kurz_bezeichnung,
			Feuerwehr ort, Date startdatum, Date enddatum) {
		super();
		EnsureService.notEmpty("bezeichnung", bezeichnung);
		EnsureService.notEmpty("kurz_bezeichnung", kurz_bezeichnung);
		EnsureService.notNull("ort", ort);
		EnsureService.notNull("startdatum", startdatum);
		EnsureService.notNull("enddatum", enddatum);
		this.bezeichnung = bezeichnung;
		this.kurzBezeichnung = kurz_bezeichnung;
		this.ort = ort;
		this.startdatum = startdatum;
		this.enddatum = enddatum;
	}

	public Ausbildung() {
		// required for JPA
	}

	public String getBezeichnung() {
		return bezeichnung;
	}

	public void setBezeichnung(String bezeichnung) {
		this.bezeichnung = bezeichnung;
	}

	public String getKurz_bezeichnung() {
		return kurzBezeichnung;
	}

	public void setKurz_bezeichnung(String kurz_bezeichnung) {
		this.kurzBezeichnung = kurz_bezeichnung;
	}

	public Feuerwehr getOrt() {
		return ort;
	}

	public void setOrt(Feuerwehr ort) {
		this.ort = ort;
	}

	public Date getStartdatum() {
		return startdatum;
	}

	public void setStartdatum(Date startdatum) {
		this.startdatum = startdatum;
	}

	public Date getEnddatum() {
		return enddatum;
	}

	public void setEnddatum(Date enddatum) {
		this.enddatum = enddatum;
	}

	
}
```


```
package at.fdisk.repository;

import java.util.Date;
import java.util.List;

import at.fdisk.domain.Ausbildung;

public interface AusbildungRepositoryCustom {
    List<Ausbildung> findByBezeichnung(String bezeichnung);
    List<Ausbildung> findByKurzbezeichnung(String kurzbezeichnung);
    List<Ausbildung> findByStartdatum(Date startdatum);
    List<Ausbildung> findByEnddatum(Date enddatum);
}
```


```
package at.fdisk.repository;

import java.util.List;
import org.springframework.data.repository.CrudRepository;

import at.fdisk.domain.Ausbildung;

public interface AusbildungRepository extends AusbildungRepositoryCustom,
		CrudRepository<Ausbildung, Long> {

	List<Ausbildung> findAll();

	Ausbildung findById(Long id);
}
```


```
package at.fdisk.repository.impl;

import java.util.Date;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import com.mysema.query.jpa.impl.JPAQuery;

import at.fdisk.domain.Ausbildung;
import at.fdisk.domain.QAusbildung;
import at.fdisk.repository.AusbildungRepositoryCustom;

public class AusbildungRepositoryImpl implements AusbildungRepositoryCustom {

	@PersistenceContext
	EntityManager entityManager;

	@Override
	public List<Ausbildung> findByBezeichnung(String bezeichnung) {
		JPAQuery query = new JPAQuery(entityManager);
		QAusbildung ausbildung = QAusbildung.ausbildung;
		query.from(ausbildung).where(ausbildung.bezeichnung.eq(bezeichnung));
		return query.list(ausbildung);
	}

	@Override
	public List<Ausbildung> findByKurzbezeichnung(String kurzbezeichnung) {
		JPAQuery query = new JPAQuery(entityManager);
		QAusbildung ausbildung = QAusbildung.ausbildung;
		query.from(ausbildung).where(
				ausbildung.kurzBezeichnung.eq(kurzbezeichnung));
		return query.list(ausbildung);
	}

	@Override
	public List<Ausbildung> findByStartdatum(Date startdatum) {
		JPAQuery query = new JPAQuery(entityManager);
		QAusbildung ausbildung = QAusbildung.ausbildung;
		query.from(ausbildung).where(ausbildung.startdatum.eq(startdatum))
				.orderBy(ausbildung.bezeichnung.asc());
		return null;
	}

	@Override
	public List<Ausbildung> findByEnddatum(Date enddatum) {
		JPAQuery query = new JPAQuery(entityManager);
		QAusbildung ausbildung = QAusbildung.ausbildung;
		query.from(ausbildung).where(ausbildung.enddatum.eq(enddatum))
				.orderBy(ausbildung.bezeichnung.asc());
		return null;
	}

}
```

Nun zu meinem Problem:
Ich teste ob die Funktion findById, welche ja von Spring automatisch implementiert wird, auch wirklich funktioniert. Das Problem dabei ist: Jedes mal wenn ich den Test durchlaufen lasse, werden die Datensätze in eine H2 Datenbank geladen welche nur den Testzwecken dient. Durch ein .deleteAll() lösche ich jedesmal vor dem Test alles aus dieser DB heraus. Doch irgendwie funktionier dies nicht und es bleibt jedesmal nur die ID gespeichert (Habe dies durch Debugging schon herausgefunden). Woran könnte das liegen ?

Hier noch der Code von meinem Test:


```
package at.fdisk.repository;

import java.util.Date;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.util.Assert;

import at.fdisk.domain.Ausbildung;
import at.fdisk.domain.Feuerwehr;
import at.fdisk.repository.AusbildungRepository;
import at.fdisk.repository.RepositoryTestConfiguration;

@ContextConfiguration(classes = RepositoryTestConfiguration.class)
public class AusbildungsRepositoryTest extends AbstractJUnit4SpringContextTests {

	@PersistenceContext
	EntityManager entityManager;

	@Autowired
	AusbildungRepository ausbildungRepository;

	@Before
	public void setup() {
		ausbildungRepository.deleteAll();
	}

	@Test
	public void testFindAll() {
		ausbildungRepository.save(new Ausbildung("TEST1", "T1",
				new Feuerwehr(), new Date(), new Date()));
		ausbildungRepository.save(new Ausbildung("TEST2", "T2",
				new Feuerwehr(), new Date(), new Date()));
		ausbildungRepository.save(new Ausbildung("TEST3", "T3",
				new Feuerwehr(), new Date(), new Date()));
		List<Ausbildung> ausbildung = ausbildungRepository.findAll();

		Assert.notNull(ausbildung);
		Assert.isTrue(ausbildung.size() == 3);
	}

	@Test
	public void testFindById() {
		AbstractApplicationContext context = new AnnotationConfigApplicationContext(
				RepositoryTestConfiguration.class);
		AusbildungRepository repository = context
				.getBean(AusbildungRepository.class);
		repository.save(new Ausbildung("TEST1", "T1",
				new Feuerwehr(), new Date(), new Date()));
		repository.save(new Ausbildung("TEST2", "T2",
				new Feuerwehr(), new Date(), new Date()));
		repository.save(new Ausbildung("TEST3", "T3",
				new Feuerwehr(), new Date(), new Date()));

		Ausbildung ausbildung = repository.findById((long) 1);
		Assert.notNull(ausbildung);
		Assert.isTrue(ausbildung.getBezeichnung().equals("TEST1"));

		context.close();
	}
}
```


----------

