Zaczniemy od utworzenia w module entity kilku klas encji JPA. Będą to: Film, Sala, Miejsce, Seans. Na początku klasa Film, z którą to pojawiają się pewne problemy:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
package pl.ekaczynski.kino.entities; /** * @author YaQzi */ @Entity @Table(name = "film") public class Film { @Column(name = "film_id") private Long id; @Column(name = "name") private String name; @Column(name = "description") private String description; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } } |
Eclipse nie potrafi odnaleźć adnotacji, ponieważ nie znajdują się one w standardowych pakietach dołączanych wraz z javą. Potrzebna więc będzie biblioteka zewnętrzna zawierająca takie adnotacje. Jak wspominaliśmy w części pierwszej takie biblioteki również pobiera i dołącza za nas maven. Ale w jaki sposób? Zajrzyjmy do pliku pom modułu worker. Odnajdziemy tam taki fragment:
1 2 3 4 5 6 7 8 |
<dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>6.0</version> <scope>provided</scope> </dependency> </dependencies> |
Dla pakietu webowego maven domyślnie dołączył zależność javaee-web-api. Skąd się jednak dowiedzieć jaka zależność jest nam potrzebna? Np dla adnotacji @Entity? Nic prostrzego
google i pierwszy link prowadzący do mvnrepository. Wybieramy najnowszą wersję typu release. W moim przypadku jest to 3.5.0-Final. Odnajdziemy tam okienko z potrzebną nam zależnością:
1 2 3 4 5 |
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-annotations</artifactId> <version>3.5.0-Final</version> </dependency> |
by Yuppy:
Używania zależności org.hibernate:hibernate-annotations ogólnie odradzam. Jest to stary moduł hibernate’a jeszcze z czasów wersji 3.5, potem adnotacje typowo hibernate’owe zostały włączone do modułu hibernate-core. Obecnie najlepszym rozwiązaniem jest korzystanie jedynie z adnotacji JPA, możemy więc dołączyć zależność org.hibernate.javax.persistence:hibernate-jpa-2.1-api lubjavax.persistence:persistence-api. No i oczywiście warto używać w miarę możliwości najnowszego Hibernate, obecnie wersji 4.3.x (z obsługą JPA 2.1).
Otwieramy zatem plik pom.xml modułu entities i dopisujemy do niego nową zależność. Ponieważ jest to pierwsza zależność w tym pliku należy również dodać tag definiujący listę zależności: <dependencies>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>pl.ekaczynski.kino</groupId> <artifactId>kino-entities</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <name>kino-entities</name> <dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-annotations</artifactId> <version>3.5.0-Final</version> </dependency> </dependencies> </project> |
Po dodaniu zależności wykonujemy na projekcie polecenie:
1 |
mvn eclipse:eclipse |
i odświeżamy projekt w Eclipsie. Jeśli wszystko wykonaliśmy poprawnie, po najechaniu na adnotacje będziemy mieć możliwość dodania odpowiedniego importu:
Możemy zatem już bez przeszkód zdefiniować wszystkie potrzebne nam encje.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
package pl.ekaczynski.kino.entities; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; /** * @author YaQzi * */ @Entity @Table(name = "film") public class Film { @Id @Column(name = "film_id") private Long id; @Column(name = "name") private String name; @Column(name = "description") private String description; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
package pl.ekaczynski.kino.entities; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; /** * @author YaQzi * */ @Entity @Table(name = "sala") public class Sala { @Id @Column(name = "sala_id") private Long id; @Column(name = "name") private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
package pl.ekaczynski.kino.entities; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; /** * @author YaQzi * */ @Entity @Table(name = "miejsce") public class Miejsce { @Id @Column(name = "miejsce_id") private Long id; @Column(name = "row") private Long row; @Column(name = "number") private Long number; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "sala_id") private Sala sala; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getRow() { return row; } public void setRow(Long row) { this.row = row; } public Long getNumber() { return number; } public void setNumber(Long number) { this.number = number; } public Sala getSala() { return sala; } public void setSala(Sala sala) { this.sala = sala; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
package pl.ekaczynski.kino.entities; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; /** * @author YaQzi * */ @Entity @Table(name = "seans") public class Seans { @Id @Column(name = "seans_id") private Long id; @Temporal(TemporalType.TIMESTAMP) @Column(name = "date") private Date date; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "film_id") private Film film; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "sala_id") private Sala sala; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public Film getFilm() { return film; } public void setFilm(Film film) { this.film = film; } public Sala getSala() { return sala; } public void setSala(Sala sala) { this.sala = sala; } } |
Kurs Maven’a [cz.01] – wstęp
Kurs Maven’a [cz.02] – od czego zacząć
Kurs Maven’a [cz.03] – do czego ten maven
Kurs Maven’a [cz.04] – zależności
Kurs Maven’a [cz.05] – instalacja
Kurs Maven’a [cz.06] – tworzenie modułu, archetyp
Kurs Maven’a [cz.07] – tworzenie modułu, kopiowanie
Kurs Maven’a [cz.08] – tworzenie modułu ręcznie
Kurs Maven’a [cz.09] – parent pom
Kurs Maven’a [cz.10] – import do Eclipsa
> Kurs Maven’a [cz.11] – zależności zewnętrzne
Kurs Maven’a [cz.12] – zależności wewnętrzne
Kurs Maven’a [cz.13] – scope, exclusion
Kurs Maven’a [cz.14] – parametry (properties)
Kurs Maven’a [cz.15] – profile
Kurs Maven’a [cz.16] – cykl życia
Kurs Maven’a [cz.17] – pluginy
Kurs Maven’a [cz.18] – repozytoria zdalne
Kurs Maven’a [cz.19] – podsumowanie