• Klasy modelu umieszczamy w pakiecie models i nie można tego przeskoczyć.
  • Każda klasa musi dziedziczyć po klasie play.db.jpa.Model.
  • Klasa nie ma pola id ani nie może definiować pola @Id. To dziedziczymy!
  • Każda klasa dostaje „w spadku” metody crud. Część metod jest oznaczona jako przestarzała. W przypadku Play Framework jest to o tyle ważne, że wykorzystywany jest mechanizm pracy z bytecodem co może zaowocować jakimś ciekawym errorem.
  • Każda klasa modelu jest encją JPA – oznaczona jest za pomocą @Entity.

Coś jeszcze? Nie? No to przykładowa klasa + test. Najpierw w pliku conf/application.conf należy odkomentować linię db=mem. W ten sposób dostajemy skonfigurowanego HSQLDB z bazą w trybie mem. Przydatne do testów.

Listing 1. Klas Simple

package models;

import javax.persistence.Entity;

import play.db.jpa.Model;

@Entity
public class Simple
	extends Model {

	private String name;
	private Long PESEL;
	private String password;

	public Simple(String name, Long pESEL, String password) {
		super();
		this.name = name;
		PESEL = pESEL;
		this.password = password;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Long getPESEL() {
		return PESEL;
	}

	public void setPESEL(Long pESEL) {
		PESEL = pESEL;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

}

Zwykłe POJO.

Listing 2. Klasa SimpleTest

package models;

import static org.junit.Assert.*;

public class SimpleTest
	extends UnitTest {

	@After
	public void tearDown(){
		// Czyścimy bazę
		Fixtures.deleteAll();
	}
	
	@Test
	public void addTest(){
		// tworzymy obiekty i zapisujemy je do bazy
		Simple simple = new  Simple("1", 1L, "1").save();
		Simple simple2 = new  Simple("1", 2L, "1").save();
		Simple simple3 = new  Simple("1", 3L, "2").save();
		
		// sporawdzamy czy są trzy sztuki.
		assertEquals(3, Simple.count());
		
		//przykłady wyszukiwania.
		assertEquals(3, Simple.find("byName", "1").fetch().size());
		assertEquals(2, Simple.find("byPassword", "1").fetch().size());
		assertEquals(1, Simple.find("byPESEL", 1L).fetch().size());
	}
}

W konsoli uruchamiamy serwer za pomocą play test w katalogu projektu.
Wchodzimy na http://localhost:9000/@tests i uruchamiamy test.

Prawda że proste?