Java/JPA/Inheritance
Содержание
- 1 Change Inheritance Type In Hierarchy
- 2 Inheritance Type JOINED
- 3 Inheritance Type TABLE_PER_CLASS
- 4 Lifecycle CallBack: Add Listener To Subclass
- 5 Lifecycle CallBack Exclude Superclass Listeners
- 6 Many To One Mapping In Mapped Super class
- 7 Map Each Class In Hierarchy To Its Own Table
- 8 Map Hierarchical Data
- 9 Map One POJO To Multiple Tables
- 10 Set Discriminator Column: Discriminator Type INTEGER
- 11 Set Discriminator Value
- 12 Set Inheritance And discriminator Column
- 13 Single Table Inheritance
- 14 Using Mapped Super class
Change Inheritance Type In Hierarchy
<source lang="java">
File: BadProfessor.java
import javax.persistence.Column; import javax.persistence.Entity; @Entity public class BadProfessor extends CompanyProfessor {
private long salary; @Column(name="PENSION") private long pensionContribution; public long getPensionContribution() { return pensionContribution; } public void setPensionContribution(long pension) { this.pensionContribution = pension; } public long getSalary() { return salary; } public void setSalary(long salary) { this.salary = salary; } public String toString() { return "FullTimeProfessor id: " + getId() + " name: " + getName(); }
}
File: CompanyProfessor.java
import javax.persistence.Entity; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.Table; @Entity @Table(name="COMPANY_EMP") @Inheritance(strategy=InheritanceType.SINGLE_TABLE) public abstract class CompanyProfessor extends Professor {
private int vacation;
public int getVacation() { return vacation; } public void setVacation(int vacation) { this.vacation = vacation; }
}
File: Professor.java import java.util.Date; import javax.persistence.Column; import javax.persistence.DiscriminatorColumn; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Table(name="EMP") @Inheritance(strategy=InheritanceType.JOINED) @DiscriminatorColumn(name="EMP_TYPE") public abstract class Professor {
@Id private int id; private String name; @Temporal(TemporalType.DATE) @Column(name="S_DATE") private Date startDate;
public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public String toString() { return "Professor id: " + getId() + " name: " + getName(); }
}
File: ProfessorService.java import java.util.Collection; import javax.persistence.EntityManager; import javax.persistence.Query; public class ProfessorService {
protected EntityManager em; public ProfessorService(EntityManager em) { this.em = em; } public void createProfessor(Professor emp) { em.persist(emp); } public Collection<Professor> findAllProfessors() { Query query = em.createQuery("SELECT e FROM Professor e"); return (Collection<Professor>) query.getResultList(); }
}
File: Main.java import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class Main {
public static void main(String[] a) throws Exception { JPAUtil util = new JPAUtil(); EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProfessorService"); EntityManager em = emf.createEntityManager(); ProfessorService service = new ProfessorService(em); em.getTransaction().begin(); BadProfessor emp2 = new BadProfessor(); emp2.setId(2); emp2.setName("bad"); service.createProfessor(emp2); System.out.println("Professors: "); for (Professor emp1 : service.findAllProfessors()) { System.out.print(emp1); } util.checkData("select * from EMP"); em.getTransaction().rumit(); em.close(); emf.close(); }
}
File: JPAUtil.java import java.io.Reader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class JPAUtil {
Statement st; public JPAUtil() throws Exception{ Class.forName("org.hsqldb.jdbcDriver"); System.out.println("Driver Loaded."); String url = "jdbc:hsqldb:data/tutorial"; Connection conn = DriverManager.getConnection(url, "sa", ""); System.out.println("Got Connection."); st = conn.createStatement(); } public void executeSQLCommand(String sql) throws Exception { st.executeUpdate(sql); } public void checkData(String sql) throws Exception { ResultSet rs = st.executeQuery(sql); ResultSetMetaData metadata = rs.getMetaData(); for (int i = 0; i < metadata.getColumnCount(); i++) { System.out.print("\t"+ metadata.getColumnLabel(i + 1)); } System.out.println("\n----------------------------------"); while (rs.next()) { for (int i = 0; i < metadata.getColumnCount(); i++) { Object value = rs.getObject(i + 1); if (value == null) { System.out.print("\t "); } else { System.out.print("\t"+value.toString().trim()); } } System.out.println(""); } }
}
File: persistence.xml
<persistence xmlns="http://java.sun.ru/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.ru/xml/ns/persistence http://java.sun.ru/xml/ns/persistence/persistence" version="1.0"> <persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> <property name="hibernate.connection.username" value="sa"/> <property name="hibernate.connection.password" value=""/> <property name="hibernate.connection.url" value="jdbc:hsqldb:data/tutorial"/> </properties> </persistence-unit>
</persistence>
</source>
Inheritance Type JOINED
<source lang="java">
File: BadProfessor.java
import javax.persistence.Column; import javax.persistence.Entity; @Entity public class BadProfessor extends CompanyProfessor {
private long salary; @Column(name="PENSION") private long pensionContribution; public long getPensionContribution() { return pensionContribution; } public void setPensionContribution(long pension) { this.pensionContribution = pension; } public long getSalary() { return salary; } public void setSalary(long salary) { this.salary = salary; } public String toString() { return "FullTimeProfessor id: " + getId() + " name: " + getName(); }
}
File: CompanyProfessor.java
import javax.persistence.Entity; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.Table; @Entity @Table(name="COMPANY_EMP") @Inheritance(strategy=InheritanceType.SINGLE_TABLE) public abstract class CompanyProfessor extends Professor {
private int vacation;
public int getVacation() { return vacation; } public void setVacation(int vacation) { this.vacation = vacation; }
}
File: Professor.java import java.util.Date; import javax.persistence.Column; import javax.persistence.DiscriminatorColumn; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Table(name="EMP") @Inheritance(strategy=InheritanceType.JOINED) @DiscriminatorColumn(name="EMP_TYPE") public abstract class Professor {
@Id private int id; private String name; @Temporal(TemporalType.DATE) @Column(name="S_DATE") private Date startDate;
public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public String toString() { return "Professor id: " + getId() + " name: " + getName(); }
}
File: ProfessorService.java import java.util.Collection; import javax.persistence.EntityManager; import javax.persistence.Query; public class ProfessorService {
protected EntityManager em; public ProfessorService(EntityManager em) { this.em = em; } public void createProfessor(Professor emp) { em.persist(emp); } public Collection<Professor> findAllProfessors() { Query query = em.createQuery("SELECT e FROM Professor e"); return (Collection<Professor>) query.getResultList(); }
}
File: JPAUtil.java import java.io.Reader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class JPAUtil {
Statement st; public JPAUtil() throws Exception{ Class.forName("org.hsqldb.jdbcDriver"); System.out.println("Driver Loaded."); String url = "jdbc:hsqldb:data/tutorial"; Connection conn = DriverManager.getConnection(url, "sa", ""); System.out.println("Got Connection."); st = conn.createStatement(); } public void executeSQLCommand(String sql) throws Exception { st.executeUpdate(sql); } public void checkData(String sql) throws Exception { ResultSet rs = st.executeQuery(sql); ResultSetMetaData metadata = rs.getMetaData(); for (int i = 0; i < metadata.getColumnCount(); i++) { System.out.print("\t"+ metadata.getColumnLabel(i + 1)); } System.out.println("\n----------------------------------"); while (rs.next()) { for (int i = 0; i < metadata.getColumnCount(); i++) { Object value = rs.getObject(i + 1); if (value == null) { System.out.print("\t "); } else { System.out.print("\t"+value.toString().trim()); } } System.out.println(""); } }
}
File: Main.java import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class Main {
public static void main(String[] a) throws Exception { JPAUtil util = new JPAUtil(); EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProfessorService"); EntityManager em = emf.createEntityManager(); ProfessorService service = new ProfessorService(em); em.getTransaction().begin(); BadProfessor emp2 = new BadProfessor(); emp2.setId(2); emp2.setName("bad"); service.createProfessor(emp2); System.out.println("Professors: "); for (Professor emp1 : service.findAllProfessors()) { System.out.print(emp1); } util.checkData("select * from EMP"); em.getTransaction().rumit(); em.close(); emf.close(); }
}
File: persistence.xml
<persistence xmlns="http://java.sun.ru/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.ru/xml/ns/persistence http://java.sun.ru/xml/ns/persistence/persistence" version="1.0"> <persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> <property name="hibernate.connection.username" value="sa"/> <property name="hibernate.connection.password" value=""/> <property name="hibernate.connection.url" value="jdbc:hsqldb:data/tutorial"/> </properties> </persistence-unit>
</persistence>
</source>
Inheritance Type TABLE_PER_CLASS
<source lang="java">
File: BadProfessor.java
import javax.persistence.AttributeOverride; import javax.persistence.AttributeOverrides; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name="BAD_EMP") @AttributeOverrides({
@AttributeOverride(name="name", column=@Column(name="FULLNAME")), @AttributeOverride(name="startDate", column=@Column(name="SDATE"))
}) public class BadProfessor extends Professor {
@Column(name="D_RATE") private int dailyRate; private int term; public int getDailyRate() { return dailyRate; } public void setDailyRate(int dailyRate) { this.dailyRate = dailyRate; } public int getTerm() { return term; } public void setTerm(int term) { this.term = term; } public String toString() { return "ContractProfessor id: " + getId() + " name: " + getName(); }
}
File: Professor.java import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) public abstract class Professor {
@Id private int id; private String name; @Temporal(TemporalType.DATE) @Column(name="S_DATE") private Date startDate; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public String toString() { return "Professor id: " + getId() + " name: " + getName(); }
}
File: ProfessorService.java import java.util.Collection; import javax.persistence.EntityManager; import javax.persistence.Query; public class ProfessorService {
protected EntityManager em; public ProfessorService(EntityManager em) { this.em = em; } public void createProfessor(Professor emp) { em.persist(emp); } public Collection<Professor> findAllProfessors() { Query query = em.createQuery("SELECT e FROM Professor e"); return (Collection<Professor>) query.getResultList(); }
}
File: JPAUtil.java import java.io.Reader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class JPAUtil {
Statement st; public JPAUtil() throws Exception{ Class.forName("org.hsqldb.jdbcDriver"); System.out.println("Driver Loaded."); String url = "jdbc:hsqldb:data/tutorial"; Connection conn = DriverManager.getConnection(url, "sa", ""); System.out.println("Got Connection."); st = conn.createStatement(); } public void executeSQLCommand(String sql) throws Exception { st.executeUpdate(sql); } public void checkData(String sql) throws Exception { ResultSet rs = st.executeQuery(sql); ResultSetMetaData metadata = rs.getMetaData(); for (int i = 0; i < metadata.getColumnCount(); i++) { System.out.print("\t"+ metadata.getColumnLabel(i + 1)); } System.out.println("\n----------------------------------"); while (rs.next()) { for (int i = 0; i < metadata.getColumnCount(); i++) { Object value = rs.getObject(i + 1); if (value == null) { System.out.print("\t "); } else { System.out.print("\t"+value.toString().trim()); } } System.out.println(""); } }
}
File: Main.java import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class Main {
public static void main(String[] a) throws Exception { JPAUtil util = new JPAUtil(); EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProfessorService"); EntityManager em = emf.createEntityManager(); ProfessorService service = new ProfessorService(em); em.getTransaction().begin(); BadProfessor emp2 = new BadProfessor(); emp2.setId(2); emp2.setName("bad"); service.createProfessor(emp2); System.out.println("Professors: "); for (Professor emp1 : service.findAllProfessors()) { System.out.print(emp1); } util.checkData("select * from BAD_EMP"); em.getTransaction().rumit(); em.close(); emf.close(); }
}
File: persistence.xml
<persistence xmlns="http://java.sun.ru/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.ru/xml/ns/persistence http://java.sun.ru/xml/ns/persistence/persistence" version="1.0"> <persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> <property name="hibernate.connection.username" value="sa"/> <property name="hibernate.connection.password" value=""/> <property name="hibernate.connection.url" value="jdbc:hsqldb:data/tutorial"/> </properties> </persistence-unit>
</persistence>
</source>
Lifecycle CallBack: Add Listener To Subclass
<source lang="java">
File: ContractProfessor.java
import javax.persistence.Column; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; import javax.persistence.EntityListeners; import javax.persistence.ExcludeSuperclassListeners; import javax.persistence.PrePersist; import javax.persistence.Table; @Entity @Table(name="CONTRACT_EMP") @DiscriminatorValue("1") @ExcludeSuperclassListeners @EntityListeners(ProfessorDebugListener.class) public class ContractProfessor extends Professor {
@Column(name="D_RATE") private int dailyRate; private int term; @PrePersist public void verifyTerm() { System.out.println("ContractProfessor.verifyTerm called on employee: " + getId()); } public int getDailyRate() { return dailyRate; } public void setDailyRate(int dailyRate) { this.dailyRate = dailyRate; } public int getTerm() { return term; } public void setTerm(int term) { this.term = term; } public String toString() { return "ContractProfessor id: " + getId() + " name: " + getName(); }
}
File: Professor.java
import java.util.Date; import javax.persistence.Column; import javax.persistence.DiscriminatorColumn; import javax.persistence.DiscriminatorType; import javax.persistence.Entity; import javax.persistence.EntityListeners; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.PostLoad; import javax.persistence.PostPersist; import javax.persistence.PostUpdate; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; @Entity @Table(name="EMP") @Inheritance(strategy=InheritanceType.JOINED) @DiscriminatorColumn(name="EMP_TYPE", discriminatorType=DiscriminatorType.INTEGER) @EntityListeners(ProfessorDebugListener.class) public abstract class Professor {
@Id private int id; private String name; @Temporal(TemporalType.DATE) @Column(name="S_DATE") private Date startDate; @Transient private long syncTime; @PostPersist @PostUpdate @PostLoad private void resetSyncTime() { System.out.println("Professor.resetSyncTime called on employee: " + getId()); syncTime = System.currentTimeMillis(); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public String toString() { return "Professor id: " + getId() + " name: " + getName(); }
}
File: ProfessorDebugListener.java import javax.persistence.PostPersist; public class ProfessorDebugListener {
@PostPersist public void auditNewHire(Professor emp) { System.out.println(" called on employee: " + emp.getId()); }
}
File: ProfessorService.java import java.util.Collection; import javax.persistence.EntityManager; import javax.persistence.Query; public class ProfessorService {
protected EntityManager em; public ProfessorService(EntityManager em) { this.em = em; } public Professor createProfessor(int id, String name) { Professor emp = new ContractProfessor(); emp.setId(id); emp.setName(name); em.persist(emp); return emp; } public void removeProfessor(int id) { Professor emp = findProfessor(id); if (emp != null) { em.remove(emp); } } public Professor changeProfessorName(int id, String newName) { Professor emp = findProfessor(id); if (emp != null) { emp.setName(newName); } return emp; } public Professor findProfessor(int id) { return em.find(Professor.class, id); } public Collection<Professor> findAllProfessors() { Query query = em.createQuery("SELECT e FROM Professor e"); return (Collection<Professor>) query.getResultList(); }
}
File: JPAUtil.java import java.io.Reader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class JPAUtil {
Statement st; public JPAUtil() throws Exception{ Class.forName("org.hsqldb.jdbcDriver"); System.out.println("Driver Loaded."); String url = "jdbc:hsqldb:data/tutorial"; Connection conn = DriverManager.getConnection(url, "sa", ""); System.out.println("Got Connection."); st = conn.createStatement(); } public void executeSQLCommand(String sql) throws Exception { st.executeUpdate(sql); } public void checkData(String sql) throws Exception { ResultSet rs = st.executeQuery(sql); ResultSetMetaData metadata = rs.getMetaData(); for (int i = 0; i < metadata.getColumnCount(); i++) { System.out.print("\t"+ metadata.getColumnLabel(i + 1)); } System.out.println("\n----------------------------------"); while (rs.next()) { for (int i = 0; i < metadata.getColumnCount(); i++) { Object value = rs.getObject(i + 1); if (value == null) { System.out.print("\t "); } else { System.out.print("\t"+value.toString().trim()); } } System.out.println(""); } }
}
File: Main.java import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class Main {
public static void main(String[] a) throws Exception { JPAUtil util = new JPAUtil(); EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProfessorService"); EntityManager em = emf.createEntityManager(); ProfessorService service = new ProfessorService(em); em.getTransaction().begin(); service.createProfessor(1, "name"); for (Professor emp : service.findAllProfessors()) { System.out.print(emp); } service.changeProfessorName(1, "newname"); for (Professor emp : service.findAllProfessors()) { System.out.print(emp); } service.removeProfessor(1); for (Professor emp : service.findAllProfessors()) { System.out.print(emp); } util.checkData("select * from CONTRACT_EMP"); em.getTransaction().rumit(); em.close(); emf.close(); }
}
File: persistence.xml <persistence xmlns="http://java.sun.ru/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.ru/xml/ns/persistence http://java.sun.ru/xml/ns/persistence/persistence" version="1.0"> <persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> <property name="hibernate.connection.username" value="sa"/> <property name="hibernate.connection.password" value=""/> <property name="hibernate.connection.url" value="jdbc:hsqldb:data/tutorial"/> </properties> </persistence-unit>
</persistence>
</source>
Lifecycle CallBack Exclude Superclass Listeners
<source lang="java">
File: ContractProfessor.java
import javax.persistence.Column; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; import javax.persistence.EntityListeners; import javax.persistence.ExcludeSuperclassListeners; import javax.persistence.PrePersist; import javax.persistence.Table; @Entity @Table(name="CONTRACT_EMP") @DiscriminatorValue("1") @ExcludeSuperclassListeners @EntityListeners(ProfessorDebugListener.class) public class ContractProfessor extends Professor {
@Column(name="D_RATE") private int dailyRate; private int term; @PrePersist public void verifyTerm() { System.out.println("ContractProfessor.verifyTerm called on employee: " + getId()); } public int getDailyRate() { return dailyRate; } public void setDailyRate(int dailyRate) { this.dailyRate = dailyRate; } public int getTerm() { return term; } public void setTerm(int term) { this.term = term; } public String toString() { return "ContractProfessor id: " + getId() + " name: " + getName(); }
}
File: Professor.java
import java.util.Date; import javax.persistence.Column; import javax.persistence.DiscriminatorColumn; import javax.persistence.DiscriminatorType; import javax.persistence.Entity; import javax.persistence.EntityListeners; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.PostLoad; import javax.persistence.PostPersist; import javax.persistence.PostUpdate; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; @Entity @Table(name="EMP") @Inheritance(strategy=InheritanceType.JOINED) @DiscriminatorColumn(name="EMP_TYPE", discriminatorType=DiscriminatorType.INTEGER) @EntityListeners(ProfessorDebugListener.class) public abstract class Professor {
@Id private int id; private String name; @Temporal(TemporalType.DATE) @Column(name="S_DATE") private Date startDate; @Transient private long syncTime; @PostPersist @PostUpdate @PostLoad private void resetSyncTime() { System.out.println("Professor.resetSyncTime called on employee: " + getId()); syncTime = System.currentTimeMillis(); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public String toString() { return "Professor id: " + getId() + " name: " + getName(); }
}
File: ProfessorDebugListener.java import javax.persistence.PostPersist; public class ProfessorDebugListener {
@PostPersist public void auditNewHire(Professor emp) { System.out.println(" called on employee: " + emp.getId()); }
}
File: ProfessorService.java import java.util.Collection; import javax.persistence.EntityManager; import javax.persistence.Query; public class ProfessorService {
protected EntityManager em; public ProfessorService(EntityManager em) { this.em = em; } public Professor createProfessor(int id, String name) { Professor emp = new ContractProfessor(); emp.setId(id); emp.setName(name); em.persist(emp); return emp; } public void removeProfessor(int id) { Professor emp = findProfessor(id); if (emp != null) { em.remove(emp); } } public Professor changeProfessorName(int id, String newName) { Professor emp = findProfessor(id); if (emp != null) { emp.setName(newName); } return emp; } public Professor findProfessor(int id) { return em.find(Professor.class, id); } public Collection<Professor> findAllProfessors() { Query query = em.createQuery("SELECT e FROM Professor e"); return (Collection<Professor>) query.getResultList(); }
}
File: JPAUtil.java import java.io.Reader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class JPAUtil {
Statement st; public JPAUtil() throws Exception{ Class.forName("org.hsqldb.jdbcDriver"); System.out.println("Driver Loaded."); String url = "jdbc:hsqldb:data/tutorial"; Connection conn = DriverManager.getConnection(url, "sa", ""); System.out.println("Got Connection."); st = conn.createStatement(); } public void executeSQLCommand(String sql) throws Exception { st.executeUpdate(sql); } public void checkData(String sql) throws Exception { ResultSet rs = st.executeQuery(sql); ResultSetMetaData metadata = rs.getMetaData(); for (int i = 0; i < metadata.getColumnCount(); i++) { System.out.print("\t"+ metadata.getColumnLabel(i + 1)); } System.out.println("\n----------------------------------"); while (rs.next()) { for (int i = 0; i < metadata.getColumnCount(); i++) { Object value = rs.getObject(i + 1); if (value == null) { System.out.print("\t "); } else { System.out.print("\t"+value.toString().trim()); } } System.out.println(""); } }
}
File: Main.java import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class Main {
public static void main(String[] a) throws Exception { JPAUtil util = new JPAUtil(); EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProfessorService"); EntityManager em = emf.createEntityManager(); ProfessorService service = new ProfessorService(em); em.getTransaction().begin(); service.createProfessor(1, "name"); for (Professor emp : service.findAllProfessors()) { System.out.print(emp); } service.changeProfessorName(1, "newname"); for (Professor emp : service.findAllProfessors()) { System.out.print(emp); } service.removeProfessor(1); for (Professor emp : service.findAllProfessors()) { System.out.print(emp); } util.checkData("select * from CONTRACT_EMP"); em.getTransaction().rumit(); em.close(); emf.close(); }
}
File: persistence.xml
<persistence xmlns="http://java.sun.ru/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.ru/xml/ns/persistence http://java.sun.ru/xml/ns/persistence/persistence" version="1.0"> <persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> <property name="hibernate.connection.username" value="sa"/> <property name="hibernate.connection.password" value=""/> <property name="hibernate.connection.url" value="jdbc:hsqldb:data/tutorial"/> </properties> </persistence-unit>
</persistence>
</source>
Many To One Mapping In Mapped Super class
<source lang="java">
File: BadProfessor.java
import javax.persistence.AssociationOverride; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.JoinColumn; import javax.persistence.Table; @Entity @Table(name="Bad_EMP") @AssociationOverride(name="manager",
joinColumns=@JoinColumn(name="MGR"))
public class BadProfessor extends CompanyProfessor {
@Column(name="H_RATE") private float hourlyRate; public float getHourlyRate() { return hourlyRate; } public void setHourlyRate(float hourlyRate) { this.hourlyRate = hourlyRate; } public String toString() { return "PartTimeProfessor id: " + getId() + " name: " + getName(); }
}
File: CompanyProfessor.java
import javax.persistence.ManyToOne; import javax.persistence.MappedSuperclass; @MappedSuperclass public abstract class CompanyProfessor extends Professor {
private int vacation; @ManyToOne private Professor manager; public int getVacation() { return vacation; } public void setVacation(int vacation) { this.vacation = vacation; } public Professor getManager() { return manager; } public void setManager(Professor manager) { this.manager = manager; }
}
File: Professor.java import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) public abstract class Professor {
@Id private int id; private String name; @Temporal(TemporalType.DATE) @Column(name="S_DATE") private Date startDate; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public String toString() { return "Professor id: " + getId() + " name: " + getName(); }
}
File: ProfessorService.java import java.util.Collection; import javax.persistence.EntityManager; import javax.persistence.Query; public class ProfessorService {
protected EntityManager em; public ProfessorService(EntityManager em) { this.em = em; } public void createProfessor(Professor emp) { em.persist(emp); } public Collection<Professor> findAllProfessors() { Query query = em.createQuery("SELECT e FROM Professor e"); return (Collection<Professor>) query.getResultList(); }
}
File: JPAUtil.java import java.io.Reader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class JPAUtil {
Statement st; public JPAUtil() throws Exception{ Class.forName("org.hsqldb.jdbcDriver"); System.out.println("Driver Loaded."); String url = "jdbc:hsqldb:data/tutorial"; Connection conn = DriverManager.getConnection(url, "sa", ""); System.out.println("Got Connection."); st = conn.createStatement(); } public void executeSQLCommand(String sql) throws Exception { st.executeUpdate(sql); } public void checkData(String sql) throws Exception { ResultSet rs = st.executeQuery(sql); ResultSetMetaData metadata = rs.getMetaData(); for (int i = 0; i < metadata.getColumnCount(); i++) { System.out.print("\t"+ metadata.getColumnLabel(i + 1)); } System.out.println("\n----------------------------------"); while (rs.next()) { for (int i = 0; i < metadata.getColumnCount(); i++) { Object value = rs.getObject(i + 1); if (value == null) { System.out.print("\t "); } else { System.out.print("\t"+value.toString().trim()); } } System.out.println(""); } }
}
File: Main.java import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class Main {
public static void main(String[] a) throws Exception { JPAUtil util = new JPAUtil(); EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProfessorService"); EntityManager em = emf.createEntityManager(); ProfessorService service = new ProfessorService(em); em.getTransaction().begin(); BadProfessor emp2 = new BadProfessor(); emp2.setId(2); emp2.setName("bad"); service.createProfessor(emp2); System.out.println("Professors: "); for (Professor emp1 : service.findAllProfessors()) { System.out.print(emp1); } util.checkData("select * from BAD_EMP"); em.getTransaction().rumit(); em.close(); emf.close(); }
}
File: persistence.xml
<persistence xmlns="http://java.sun.ru/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.ru/xml/ns/persistence http://java.sun.ru/xml/ns/persistence/persistence" version="1.0"> <persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> <property name="hibernate.connection.username" value="sa"/> <property name="hibernate.connection.password" value=""/> <property name="hibernate.connection.url" value="jdbc:hsqldb:data/tutorial"/> </properties> </persistence-unit>
</persistence>
</source>
Map Each Class In Hierarchy To Its Own Table
<source lang="java">
File: BadProfessor.java
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name="CONTRACT_EMP") public class BadProfessor extends Professor {
@Column(name="D_RATE") private int dailyRate; private int term; public int getDailyRate() { return dailyRate; } public void setDailyRate(int dailyRate) { this.dailyRate = dailyRate; } public int getTerm() { return term; } public void setTerm(int term) { this.term = term; } public String toString() { return "ContractProfessor id: " + getId() + " name: " + getName(); }
}
File: Professor.java import java.util.Date; import javax.persistence.Column; import javax.persistence.DiscriminatorColumn; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Table(name="EMP") @Inheritance(strategy=InheritanceType.JOINED) @DiscriminatorColumn(name="EMP_TYPE") public abstract class Professor {
@Id private int id; private String name; @Temporal(TemporalType.DATE) @Column(name="S_DATE") private Date startDate;
public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public String toString() { return "Professor id: " + getId() + " name: " + getName(); }
}
File: ProfessorService.java import java.util.Collection; import javax.persistence.EntityManager; import javax.persistence.Query; public class ProfessorService {
protected EntityManager em; public ProfessorService(EntityManager em) { this.em = em; } public void createProfessor(Professor emp) { em.persist(emp); } public Collection<Professor> findAllProfessors() { Query query = em.createQuery("SELECT e FROM Professor e"); return (Collection<Professor>) query.getResultList(); }
}
File: JPAUtil.java import java.io.Reader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class JPAUtil {
Statement st; public JPAUtil() throws Exception{ Class.forName("org.hsqldb.jdbcDriver"); System.out.println("Driver Loaded."); String url = "jdbc:hsqldb:data/tutorial"; Connection conn = DriverManager.getConnection(url, "sa", ""); System.out.println("Got Connection."); st = conn.createStatement(); } public void executeSQLCommand(String sql) throws Exception { st.executeUpdate(sql); } public void checkData(String sql) throws Exception { ResultSet rs = st.executeQuery(sql); ResultSetMetaData metadata = rs.getMetaData(); for (int i = 0; i < metadata.getColumnCount(); i++) { System.out.print("\t"+ metadata.getColumnLabel(i + 1)); } System.out.println("\n----------------------------------"); while (rs.next()) { for (int i = 0; i < metadata.getColumnCount(); i++) { Object value = rs.getObject(i + 1); if (value == null) { System.out.print("\t "); } else { System.out.print("\t"+value.toString().trim()); } } System.out.println(""); } }
}
File: Main.java import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class Main {
public static void main(String[] a) throws Exception { JPAUtil util = new JPAUtil(); EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProfessorService"); EntityManager em = emf.createEntityManager(); ProfessorService service = new ProfessorService(em); em.getTransaction().begin(); BadProfessor emp2 = new BadProfessor(); emp2.setId(2); emp2.setName("bad"); service.createProfessor(emp2); System.out.println("Professors: "); for (Professor emp1 : service.findAllProfessors()) { System.out.print(emp1); } util.checkData("select * from EMP"); em.getTransaction().rumit(); em.close(); emf.close(); }
}
File: persistence.xml <persistence xmlns="http://java.sun.ru/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.ru/xml/ns/persistence http://java.sun.ru/xml/ns/persistence/persistence" version="1.0"> <persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> <property name="hibernate.connection.username" value="sa"/> <property name="hibernate.connection.password" value=""/> <property name="hibernate.connection.url" value="jdbc:hsqldb:data/tutorial"/> </properties> </persistence-unit>
</persistence>
</source>
Map Hierarchical Data
<source lang="java">
File: Professor.java import javax.persistence.Basic; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.IdClass; import javax.persistence.JoinColumn; import javax.persistence.JoinColumns; import javax.persistence.Lob; import javax.persistence.ManyToOne; import javax.persistence.PrimaryKeyJoinColumn; import javax.persistence.SecondaryTable; import javax.persistence.SecondaryTables; @Entity @SecondaryTables( {
@SecondaryTable(name = "COMPANY", pkJoinColumns = { @PrimaryKeyJoinColumn(name = "ID", referencedColumnName = "ID") })
}) public class Professor {
private String country; @Id private int id; private String name; @ManyToOne @JoinColumns( { @JoinColumn(name = "MGR_ID", referencedColumnName = "ID", table = "COMPANY") }) private Professor manager; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Professor getManager() { return manager; } public void setManager(Professor manager) { this.manager = manager; } public String toString() { return "Professor id: " + getId() + " name: " + getName() + " country: " + getCountry(); }
}
File: ProfessorId.java import java.io.Serializable; public class ProfessorId implements Serializable {
private String country; private int id; public ProfessorId() { } public ProfessorId(String country, int id) { this.country = country; this.id = id; } public String getCountry() { return country; } public int getId() { return id; } public boolean equals(Object o) { return ((o instanceof ProfessorId) && country.equals(((ProfessorId) o).getCountry()) && id == ((ProfessorId) o) .getId()); } public int hashCode() { return country.hashCode() + id; }
}
File: ProfessorService.java import java.util.Collection; import javax.persistence.EntityManager; import javax.persistence.Query; public class ProfessorService {
protected EntityManager em; public ProfessorService(EntityManager em) { this.em = em; } public Professor createProfessor(String country, int id, String name) { Professor emp = new Professor(); emp.setCountry(country); emp.setId(id); emp.setName(name); em.persist(emp); return emp; } public Professor findProfessor(String country, int id) { return em.find(Professor.class, new ProfessorId(country, id)); } public Collection<Professor> findAllProfessors() { Query query = em.createQuery("SELECT e FROM Professor e"); return (Collection<Professor>) query.getResultList(); }
}
File: JPAUtil.java import java.io.Reader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class JPAUtil {
Statement st; public JPAUtil() throws Exception{ Class.forName("org.hsqldb.jdbcDriver"); System.out.println("Driver Loaded."); String url = "jdbc:hsqldb:data/tutorial"; Connection conn = DriverManager.getConnection(url, "sa", ""); System.out.println("Got Connection."); st = conn.createStatement(); } public void executeSQLCommand(String sql) throws Exception { st.executeUpdate(sql); } public void checkData(String sql) throws Exception { ResultSet rs = st.executeQuery(sql); ResultSetMetaData metadata = rs.getMetaData(); for (int i = 0; i < metadata.getColumnCount(); i++) { System.out.print("\t"+ metadata.getColumnLabel(i + 1)); } System.out.println("\n----------------------------------"); while (rs.next()) { for (int i = 0; i < metadata.getColumnCount(); i++) { Object value = rs.getObject(i + 1); if (value == null) { System.out.print("\t "); } else { System.out.print("\t"+value.toString().trim()); } } System.out.println(""); } }
}
File: Main.java import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class Main {
public static void main(String[] a) throws Exception { JPAUtil util = new JPAUtil(); EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProfessorService"); EntityManager em = emf.createEntityManager(); ProfessorService service = new ProfessorService(em); em.getTransaction().begin(); service.createProfessor("country", 1, "name"); System.out.println("Professors:"); for (Professor emp : service.findAllProfessors()) { System.out.print(emp); System.out.print(emp.getManager()); } util.checkData("select * from Professor"); em.getTransaction().rumit(); em.close(); emf.close(); }
}
File: persistence.xml
<persistence xmlns="http://java.sun.ru/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.ru/xml/ns/persistence http://java.sun.ru/xml/ns/persistence/persistence" version="1.0"> <persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> <property name="hibernate.connection.username" value="sa"/> <property name="hibernate.connection.password" value=""/> <property name="hibernate.connection.url" value="jdbc:hsqldb:data/tutorial"/> </properties> </persistence-unit>
</persistence>
</source>
Map One POJO To Multiple Tables
<source lang="java">
File: Professor.java import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.PrimaryKeyJoinColumn; import javax.persistence.SecondaryTable; import javax.persistence.Table; @Entity @Table(name = "EMP") @SecondaryTable(name = "EMP_ADDRESS", pkJoinColumns = @PrimaryKeyJoinColumn(name = "EMP_ID")) public class Professor {
@Id private int id; private String name; @Column(table = "EMP_ADDRESS") private String street; @Column(table = "EMP_ADDRESS") private String city; @Column(table = "EMP_ADDRESS") private String state; @Column(name = "ZIP_CODE", table = "EMP_ADDRESS") private String zip; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getState() { return state; } public void setState(String state) { this.state = state; } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String getZip() { return zip; } public void setZip(String zip) { this.zip = zip; } public String toString() { return "Professor id: " + getId() + " name: " + getName(); }
}
File: ProfessorService.java import java.util.Collection; import java.util.Date; import javax.persistence.EntityManager; import javax.persistence.Query; public class ProfessorService {
protected EntityManager em; public ProfessorService(EntityManager em) { this.em = em; } public Professor createProfessorAndAddress(int id, String name, String street, String city, String state, String zip) { Professor emp = new Professor(); emp.setId(id); emp.setName(name); emp.setStreet(street); emp.setCity(city); emp.setState(state); emp.setZip(zip); em.persist(emp); return emp;
} public Collection<Professor> findAllProfessors() {
Query query = em.createQuery("SELECT e FROM Professor e"); return (Collection<Professor>) query.getResultList();
} }
File: JPAUtil.java import java.io.Reader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class JPAUtil {
Statement st; public JPAUtil() throws Exception{ Class.forName("org.hsqldb.jdbcDriver"); System.out.println("Driver Loaded."); String url = "jdbc:hsqldb:data/tutorial"; Connection conn = DriverManager.getConnection(url, "sa", ""); System.out.println("Got Connection."); st = conn.createStatement(); } public void executeSQLCommand(String sql) throws Exception { st.executeUpdate(sql); } public void checkData(String sql) throws Exception { ResultSet rs = st.executeQuery(sql); ResultSetMetaData metadata = rs.getMetaData(); for (int i = 0; i < metadata.getColumnCount(); i++) { System.out.print("\t"+ metadata.getColumnLabel(i + 1)); } System.out.println("\n----------------------------------"); while (rs.next()) { for (int i = 0; i < metadata.getColumnCount(); i++) { Object value = rs.getObject(i + 1); if (value == null) { System.out.print("\t "); } else { System.out.print("\t"+value.toString().trim()); } } System.out.println(""); } }
}
File: Main.java import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class Main {
public static void main(String[] a) throws Exception { JPAUtil util = new JPAUtil(); EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProfessorService"); EntityManager em = emf.createEntityManager(); ProfessorService service = new ProfessorService(em); em.getTransaction().begin(); service.createProfessorAndAddress(1, "name", "street", "city", "state", "zip"); System.out.println("Professors and Addresses:"); for (Professor emp : service.findAllProfessors()) { System.out.println(emp); } util.checkData("select * from EMP"); em.getTransaction().rumit(); em.close(); emf.close(); }
}
File: persistence.xml <persistence xmlns="http://java.sun.ru/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.ru/xml/ns/persistence http://java.sun.ru/xml/ns/persistence/persistence" version="1.0"> <persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> <property name="hibernate.connection.username" value="sa"/> <property name="hibernate.connection.password" value=""/> <property name="hibernate.connection.url" value="jdbc:hsqldb:data/tutorial"/> </properties> </persistence-unit>
</persistence>
</source>
Set Discriminator Column: Discriminator Type INTEGER
<source lang="java">
File: AbstractProfessor.java
import javax.persistence.MappedSuperclass; @MappedSuperclass public abstract class AbstractProfessor extends Professor {
private int vacation; public int getVacation() { return vacation; } public void setVacation(int vacation) { this.vacation = vacation; }
}
File: BadProfessor.java import javax.persistence.Column; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name="Bad_EMP") @DiscriminatorValue("3") public class BadProfessor extends AbstractProfessor {
@Column(name="H_RATE") private float hourlyRate = 1; public float getHourlyRate() { return hourlyRate; } public void setHourlyRate(float hourlyRate) { this.hourlyRate = hourlyRate; } public String toString() { return "PartTimeProfessor id: " + getId() + " name: " + getName(); }
}
File: GoodProfessor.java import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name="Good_EMP") @DiscriminatorValue("2") public class GoodProfessor extends AbstractProfessor {
private long salary = 1; private long pension = 1; public long getPension() { return pension; } public void setPension(long pension) { this.pension = pension; } public long getSalary() { return salary; } public void setSalary(long salary) { this.salary = salary; } public String toString() { return "FullTimeProfessor id: " + getId() + " name: " + getName(); }
}
File: Professor.java import java.util.Date; import javax.persistence.Column; import javax.persistence.DiscriminatorColumn; import javax.persistence.DiscriminatorType; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Table(name = "EMP") @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name = "EMP_TYPE", discriminatorType = DiscriminatorType.INTEGER) public abstract class Professor {
@Id private int id; private String name; @Temporal(TemporalType.DATE) @Column(name = "S_DATE") private Date startDate; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public String toString() { return "Professor id: " + getId() + " name: " + getName(); }
}
File: ProfessorService.java import java.util.Collection; import javax.persistence.EntityManager; import javax.persistence.Query; public class ProfessorService {
protected EntityManager em; public ProfessorService(EntityManager em) { this.em = em; } public void createProfessor(Professor emp) { em.persist(emp); } public Collection<Professor> findAllProfessors() { Query query = em.createQuery("SELECT e FROM Professor e"); return (Collection<Professor>) query.getResultList(); }
}
File: JPAUtil.java import java.io.Reader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class JPAUtil {
Statement st; public JPAUtil() throws Exception{ Class.forName("org.hsqldb.jdbcDriver"); System.out.println("Driver Loaded."); String url = "jdbc:hsqldb:data/tutorial"; Connection conn = DriverManager.getConnection(url, "sa", ""); System.out.println("Got Connection."); st = conn.createStatement(); } public void executeSQLCommand(String sql) throws Exception { st.executeUpdate(sql); } public void checkData(String sql) throws Exception { ResultSet rs = st.executeQuery(sql); ResultSetMetaData metadata = rs.getMetaData(); for (int i = 0; i < metadata.getColumnCount(); i++) { System.out.print("\t"+ metadata.getColumnLabel(i + 1)); } System.out.println("\n----------------------------------"); while (rs.next()) { for (int i = 0; i < metadata.getColumnCount(); i++) { Object value = rs.getObject(i + 1); if (value == null) { System.out.print("\t "); } else { System.out.print("\t"+value.toString().trim()); } } System.out.println(""); } }
}
File: Main.java import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class Main {
public static void main(String[] a) throws Exception { JPAUtil util = new JPAUtil(); EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProfessorService"); EntityManager em = emf.createEntityManager(); ProfessorService service = new ProfessorService(em); em.getTransaction().begin(); GoodProfessor emp = null; emp = new GoodProfessor(); emp.setId(1); emp.setName("good"); service.createProfessor(emp); BadProfessor emp2 = new BadProfessor(); emp2.setId(2); emp2.setName("bad"); service.createProfessor(emp2); System.out.println("Professors: "); for (Professor emp1 : service.findAllProfessors()) { System.out.print(emp1); } util.checkData("select * from EMP"); em.getTransaction().rumit(); em.close(); emf.close(); }
}
File: persistence.xml
<persistence xmlns="http://java.sun.ru/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.ru/xml/ns/persistence http://java.sun.ru/xml/ns/persistence/persistence" version="1.0"> <persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> <property name="hibernate.connection.username" value="sa"/> <property name="hibernate.connection.password" value=""/> <property name="hibernate.connection.url" value="jdbc:hsqldb:data/tutorial"/> </properties> </persistence-unit>
</persistence>
</source>
Set Discriminator Value
<source lang="java">
File: AbstractProfessor.java
import javax.persistence.MappedSuperclass; @MappedSuperclass public abstract class AbstractProfessor extends Professor {
private int vacation; public int getVacation() { return vacation; } public void setVacation(int vacation) { this.vacation = vacation; }
}
File: BadProfessor.java
import javax.persistence.Column; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; @Entity(name="BadEmp") @DiscriminatorValue("BadEmp") public class BadProfessor extends AbstractProfessor {
@Column(name="H_RATE") private float hourlyRate; public float getHourlyRate() { return hourlyRate; } public void setHourlyRate(float hourlyRate) { this.hourlyRate = hourlyRate; } public String toString() { return "PartTimeProfessor id: " + getId() + " name: " + getName(); }
}
File: GoodProfessor.java
import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; @Entity @DiscriminatorValue("GoodEmp") public class GoodProfessor extends AbstractProfessor {
private long salary; private long pension; public long getPension() { return pension; } public void setPension(long pension) { this.pension = pension; } public long getSalary() { return salary; } public void setSalary(long salary) { this.salary = salary; } public String toString() { return "GoodProfessor id: " + getId() + " name: " + getName(); }
}
File: Professor.java
import java.util.Date; import javax.persistence.Column; import javax.persistence.DiscriminatorColumn; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Table(name="EMP") @Inheritance @DiscriminatorColumn(name="EMP_TYPE") public abstract class Professor {
@Id private int id; private String name; @Temporal(TemporalType.DATE) @Column(name="S_DATE") private Date startDate; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public String toString() { return "Professor id: " + getId() + " name: " + getName(); }
}
File: ProfessorService.java import java.util.Collection; import javax.persistence.EntityManager; import javax.persistence.Query; public class ProfessorService {
protected EntityManager em; public ProfessorService(EntityManager em) { this.em = em; } public void createProfessor(Professor emp) { em.persist(emp); } public Collection<Professor> findAllProfessors() { Query query = em.createQuery("SELECT e FROM Professor e"); return (Collection<Professor>) query.getResultList(); }
}
File: JPAUtil.java import java.io.Reader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class JPAUtil {
Statement st; public JPAUtil() throws Exception{ Class.forName("org.hsqldb.jdbcDriver"); System.out.println("Driver Loaded."); String url = "jdbc:hsqldb:data/tutorial"; Connection conn = DriverManager.getConnection(url, "sa", ""); System.out.println("Got Connection."); st = conn.createStatement(); } public void executeSQLCommand(String sql) throws Exception { st.executeUpdate(sql); } public void checkData(String sql) throws Exception { ResultSet rs = st.executeQuery(sql); ResultSetMetaData metadata = rs.getMetaData(); for (int i = 0; i < metadata.getColumnCount(); i++) { System.out.print("\t"+ metadata.getColumnLabel(i + 1)); } System.out.println("\n----------------------------------"); while (rs.next()) { for (int i = 0; i < metadata.getColumnCount(); i++) { Object value = rs.getObject(i + 1); if (value == null) { System.out.print("\t "); } else { System.out.print("\t"+value.toString().trim()); } } System.out.println(""); } }
}
File: Main.java import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class Main {
public static void main(String[] a) throws Exception { JPAUtil util = new JPAUtil(); EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProfessorService"); EntityManager em = emf.createEntityManager(); ProfessorService service = new ProfessorService(em); em.getTransaction().begin(); Professor emp = null; emp = new GoodProfessor(); emp.setId(1); emp.setName("good"); service.createProfessor(emp); emp = new BadProfessor(); emp.setId(2); emp.setName("bad"); service.createProfessor(emp); System.out.println("Professors: "); for (Professor emp1 : service.findAllProfessors()) { System.out.print(emp1); } util.checkData("select * from EMP"); em.getTransaction().rumit(); em.close(); emf.close(); }
}
File: persistence.xml
<persistence xmlns="http://java.sun.ru/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.ru/xml/ns/persistence http://java.sun.ru/xml/ns/persistence/persistence" version="1.0"> <persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> <property name="hibernate.connection.username" value="sa"/> <property name="hibernate.connection.password" value=""/> <property name="hibernate.connection.url" value="jdbc:hsqldb:data/tutorial"/> </properties> </persistence-unit>
</persistence>
</source>
Set Inheritance And discriminator Column
<source lang="java">
File: ContractProfessor.java
import javax.persistence.Column; import javax.persistence.Entity; @Entity public class ContractProfessor extends Professor {
@Column(name="D_RATE") private int dailyRate; private int term; public int getDailyRate() { return dailyRate; } public void setDailyRate(int dailyRate) { this.dailyRate = dailyRate; } public int getTerm() { return term; } public void setTerm(int term) { this.term = term; } public String toString() { return "ContractProfessor id: " + getId() + " name: " + getName(); }
}
File: Professor.java
import java.util.Date; import javax.persistence.Column; import javax.persistence.DiscriminatorColumn; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Table(name="EMP") @Inheritance @DiscriminatorColumn(name="EMP_TYPE") public abstract class Professor {
@Id private int id; private String name; @Temporal(TemporalType.DATE) @Column(name="S_DATE") private Date startDate; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public String toString() { return "Professor id: " + getId() + " name: " + getName(); }
}
File: ProfessorService.java import java.util.Collection; import javax.persistence.EntityManager; import javax.persistence.Query; public class ProfessorService {
protected EntityManager em; public ProfessorService(EntityManager em) { this.em = em; } public void createProfessor(Professor emp) { em.persist(emp); } public Collection<Professor> findAllProfessors() { Query query = em.createQuery("SELECT e FROM Professor e"); return (Collection<Professor>) query.getResultList(); }
}
File: JPAUtil.java import java.io.Reader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class JPAUtil {
Statement st; public JPAUtil() throws Exception{ Class.forName("org.hsqldb.jdbcDriver"); System.out.println("Driver Loaded."); String url = "jdbc:hsqldb:data/tutorial"; Connection conn = DriverManager.getConnection(url, "sa", ""); System.out.println("Got Connection."); st = conn.createStatement(); } public void executeSQLCommand(String sql) throws Exception { st.executeUpdate(sql); } public void checkData(String sql) throws Exception { ResultSet rs = st.executeQuery(sql); ResultSetMetaData metadata = rs.getMetaData(); for (int i = 0; i < metadata.getColumnCount(); i++) { System.out.print("\t"+ metadata.getColumnLabel(i + 1)); } System.out.println("\n----------------------------------"); while (rs.next()) { for (int i = 0; i < metadata.getColumnCount(); i++) { Object value = rs.getObject(i + 1); if (value == null) { System.out.print("\t "); } else { System.out.print("\t"+value.toString().trim()); } } System.out.println(""); } }
}
File: Main.java import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class Main {
public static void main(String[] a) throws Exception { JPAUtil util = new JPAUtil(); EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProfessorService"); EntityManager em = emf.createEntityManager(); ProfessorService service = new ProfessorService(em); em.getTransaction().begin(); Professor emp = null; emp = new ContractProfessor(); emp.setId(1); emp.setName("name"); service.createProfessor(emp); System.out.println("Professors: "); for (Professor emp1 : service.findAllProfessors()) { System.out.print(emp1); } util.checkData("select * from EMP"); em.getTransaction().rumit(); em.close(); emf.close(); }
}
File: persistence.xml <persistence xmlns="http://java.sun.ru/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.ru/xml/ns/persistence http://java.sun.ru/xml/ns/persistence/persistence" version="1.0"> <persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> <property name="hibernate.connection.username" value="sa"/> <property name="hibernate.connection.password" value=""/> <property name="hibernate.connection.url" value="jdbc:hsqldb:data/tutorial"/> </properties> </persistence-unit>
</persistence>
</source>
Single Table Inheritance
<source lang="java">
File: ContractProfessor.java
import javax.persistence.Column; import javax.persistence.Entity; @Entity public class ContractProfessor extends Professor {
@Column(name="D_RATE") private int dailyRate; private int term; public int getDailyRate() { return dailyRate; } public void setDailyRate(int dailyRate) { this.dailyRate = dailyRate; } public int getTerm() { return term; } public void setTerm(int term) { this.term = term; } public String toString() { return "ContractProfessor id: " + getId() + " name: " + getName(); }
}
File: Professor.java
import java.util.Date; import javax.persistence.Column; import javax.persistence.DiscriminatorColumn; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Table(name="EMP") @Inheritance @DiscriminatorColumn(name="EMP_TYPE") public abstract class Professor {
@Id private int id; private String name; @Temporal(TemporalType.DATE) @Column(name="S_DATE") private Date startDate; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public String toString() { return "Professor id: " + getId() + " name: " + getName(); }
}
File: ProfessorService.java import java.util.Collection; import javax.persistence.EntityManager; import javax.persistence.Query; public class ProfessorService {
protected EntityManager em; public ProfessorService(EntityManager em) { this.em = em; } public void createProfessor(Professor emp) { em.persist(emp); } public Collection<Professor> findAllProfessors() { Query query = em.createQuery("SELECT e FROM Professor e"); return (Collection<Professor>) query.getResultList(); }
}
File: Main.java import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class Main {
public static void main(String[] a) throws Exception { JPAUtil util = new JPAUtil(); EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProfessorService"); EntityManager em = emf.createEntityManager(); ProfessorService service = new ProfessorService(em); em.getTransaction().begin(); Professor emp = null; emp = new ContractProfessor(); emp.setId(1); emp.setName("name"); service.createProfessor(emp); System.out.println("Professors: "); for (Professor emp1 : service.findAllProfessors()) { System.out.print(emp1); } util.checkData("select * from EMP"); em.getTransaction().rumit(); em.close(); emf.close(); }
}
File: JPAUtil.java import java.io.Reader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class JPAUtil {
Statement st; public JPAUtil() throws Exception{ Class.forName("org.hsqldb.jdbcDriver"); System.out.println("Driver Loaded."); String url = "jdbc:hsqldb:data/tutorial"; Connection conn = DriverManager.getConnection(url, "sa", ""); System.out.println("Got Connection."); st = conn.createStatement(); } public void executeSQLCommand(String sql) throws Exception { st.executeUpdate(sql); } public void checkData(String sql) throws Exception { ResultSet rs = st.executeQuery(sql); ResultSetMetaData metadata = rs.getMetaData(); for (int i = 0; i < metadata.getColumnCount(); i++) { System.out.print("\t"+ metadata.getColumnLabel(i + 1)); } System.out.println("\n----------------------------------"); while (rs.next()) { for (int i = 0; i < metadata.getColumnCount(); i++) { Object value = rs.getObject(i + 1); if (value == null) { System.out.print("\t "); } else { System.out.print("\t"+value.toString().trim()); } } System.out.println(""); } }
}
File: persistence.xml
<persistence xmlns="http://java.sun.ru/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.ru/xml/ns/persistence http://java.sun.ru/xml/ns/persistence/persistence" version="1.0"> <persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> <property name="hibernate.connection.username" value="sa"/> <property name="hibernate.connection.password" value=""/> <property name="hibernate.connection.url" value="jdbc:hsqldb:data/tutorial"/> </properties> </persistence-unit>
</persistence>
</source>
Using Mapped Super class
<source lang="java">
File: Professor.java
import java.util.Date; import javax.persistence.Column; import javax.persistence.DiscriminatorColumn; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Table(name="EMP") @Inheritance @DiscriminatorColumn(name="EMP_TYPE") public abstract class Professor {
@Id private int id; private String name; @Temporal(TemporalType.DATE) @Column(name="S_DATE") private Date startDate; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public String toString() { return "Professor id: " + getId() + " name: " + getName(); }
}
File: BadProfessor.java
import javax.persistence.Column; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; @Entity(name="BadEmp") @DiscriminatorValue("BadEmp") public class BadProfessor extends AbstractProfessor {
@Column(name="H_RATE") private float hourlyRate; public float getHourlyRate() { return hourlyRate; } public void setHourlyRate(float hourlyRate) { this.hourlyRate = hourlyRate; } public String toString() { return "PartTimeProfessor id: " + getId() + " name: " + getName(); }
}
File: GoodProfessor.java
import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; @Entity @DiscriminatorValue("GoodEmp") public class GoodProfessor extends AbstractProfessor {
private long salary; private long pension; public long getPension() { return pension; } public void setPension(long pension) { this.pension = pension; } public long getSalary() { return salary; } public void setSalary(long salary) { this.salary = salary; } public String toString() { return "GoodProfessor id: " + getId() + " name: " + getName(); }
}
File: ProfessorService.java import java.util.Collection; import javax.persistence.EntityManager; import javax.persistence.Query; public class ProfessorService {
protected EntityManager em; public ProfessorService(EntityManager em) { this.em = em; } public void createProfessor(Professor emp) { em.persist(emp); } public Collection<Professor> findAllProfessors() { Query query = em.createQuery("SELECT e FROM Professor e"); return (Collection<Professor>) query.getResultList(); }
}
File: AbstractProfessor.java
import javax.persistence.MappedSuperclass; @MappedSuperclass public abstract class AbstractProfessor extends Professor {
private int vacation; public int getVacation() { return vacation; } public void setVacation(int vacation) { this.vacation = vacation; }
}
File: JPAUtil.java import java.io.Reader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class JPAUtil {
Statement st; public JPAUtil() throws Exception{ Class.forName("org.hsqldb.jdbcDriver"); System.out.println("Driver Loaded."); String url = "jdbc:hsqldb:data/tutorial"; Connection conn = DriverManager.getConnection(url, "sa", ""); System.out.println("Got Connection."); st = conn.createStatement(); } public void executeSQLCommand(String sql) throws Exception { st.executeUpdate(sql); } public void checkData(String sql) throws Exception { ResultSet rs = st.executeQuery(sql); ResultSetMetaData metadata = rs.getMetaData(); for (int i = 0; i < metadata.getColumnCount(); i++) { System.out.print("\t"+ metadata.getColumnLabel(i + 1)); } System.out.println("\n----------------------------------"); while (rs.next()) { for (int i = 0; i < metadata.getColumnCount(); i++) { Object value = rs.getObject(i + 1); if (value == null) { System.out.print("\t "); } else { System.out.print("\t"+value.toString().trim()); } } System.out.println(""); } }
}
File: Main.java import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class Main {
public static void main(String[] a) throws Exception { JPAUtil util = new JPAUtil(); EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProfessorService"); EntityManager em = emf.createEntityManager(); ProfessorService service = new ProfessorService(em); em.getTransaction().begin(); Professor emp = null; emp = new GoodProfessor(); emp.setId(1); emp.setName("good"); service.createProfessor(emp); emp = new BadProfessor(); emp.setId(2); emp.setName("bad"); service.createProfessor(emp); System.out.println("Professors: "); for (Professor emp1 : service.findAllProfessors()) { System.out.print(emp1); } util.checkData("select * from EMP"); em.getTransaction().rumit(); em.close(); emf.close(); }
}
File: persistence.xml
<persistence xmlns="http://java.sun.ru/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.ru/xml/ns/persistence http://java.sun.ru/xml/ns/persistence/persistence" version="1.0"> <persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> <property name="hibernate.connection.username" value="sa"/> <property name="hibernate.connection.password" value=""/> <property name="hibernate.connection.url" value="jdbc:hsqldb:data/tutorial"/> </properties> </persistence-unit>
</persistence>
</source>