Merge pull request #6715 from vimde/master
BAEL-2857 Defining a JPA Entity
This commit is contained in:
commit
85dfbca818
|
@ -0,0 +1,75 @@
|
|||
package com.baeldung.jpa.entity;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.EnumType;
|
||||
import javax.persistence.Enumerated;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
import javax.persistence.Temporal;
|
||||
import javax.persistence.TemporalType;
|
||||
import javax.persistence.Transient;
|
||||
|
||||
import com.baeldung.util.Gender;
|
||||
|
||||
@Entity
|
||||
@Table(name="STUDENT")
|
||||
public class Student {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||
private Long id;
|
||||
@Column(name = "STUDENT_NAME", length = 50, nullable = false, unique = false)
|
||||
private String name;
|
||||
@Transient
|
||||
private Integer age;
|
||||
@Temporal(TemporalType.DATE)
|
||||
private Date birthDate;
|
||||
@Enumerated(EnumType.STRING)
|
||||
private Gender gender;
|
||||
|
||||
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 Integer getAge() {
|
||||
return age;
|
||||
}
|
||||
|
||||
public void setAge(Integer age) {
|
||||
this.age = age;
|
||||
}
|
||||
|
||||
public Date getBirthDate() {
|
||||
return birthDate;
|
||||
}
|
||||
|
||||
public void setBirthDate(Date birthDate) {
|
||||
this.birthDate = birthDate;
|
||||
}
|
||||
|
||||
public Gender getGender() {
|
||||
return gender;
|
||||
}
|
||||
|
||||
public void setGender(Gender gender) {
|
||||
this.gender = gender;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
package com.baeldung.util;
|
||||
|
||||
public enum Gender {
|
||||
MALE,
|
||||
FEMALE
|
||||
}
|
|
@ -147,5 +147,20 @@
|
|||
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false" />
|
||||
</properties>
|
||||
</persistence-unit>
|
||||
|
||||
|
||||
<persistence-unit name="jpa-entity-definition">
|
||||
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
|
||||
<class>com.baeldung.jpa.entity.Student</class>
|
||||
<exclude-unlisted-classes>true</exclude-unlisted-classes>
|
||||
<properties>
|
||||
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
|
||||
<property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test" />
|
||||
<property name="javax.persistence.jdbc.user" value="sa" />
|
||||
<property name="javax.persistence.jdbc.password" value="" />
|
||||
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
|
||||
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
|
||||
<property name="show_sql" value="true" />
|
||||
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false" />
|
||||
</properties>
|
||||
</persistence-unit>
|
||||
</persistence>
|
|
@ -0,0 +1,91 @@
|
|||
package com.baeldung.jpa.entity;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.ZoneId;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.EntityManagerFactory;
|
||||
import javax.persistence.Persistence;
|
||||
import javax.persistence.TypedQuery;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.baeldung.util.Gender;
|
||||
|
||||
public class StudentEntityIntegrationTest {
|
||||
|
||||
private EntityManagerFactory emf;
|
||||
private EntityManager em;
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
emf = Persistence.createEntityManagerFactory("jpa-entity-definition");
|
||||
em = emf.createEntityManager();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void persistStudentThenRetrieveTheDetails() {
|
||||
Student student = createStudentWithRelevantDetails();
|
||||
persist(student);
|
||||
clearThePersistenceContext();
|
||||
List<Student> students = getStudentsFromTable();
|
||||
checkAssertionsWith(students);
|
||||
}
|
||||
|
||||
@After
|
||||
public void destroy() {
|
||||
if (em != null) {
|
||||
em.close();
|
||||
}
|
||||
if (emf != null) {
|
||||
emf.close();
|
||||
}
|
||||
}
|
||||
|
||||
private void clearThePersistenceContext() {
|
||||
em.clear();
|
||||
}
|
||||
|
||||
private void checkAssertionsWith(List<Student> students) {
|
||||
assertEquals(1, students.size());
|
||||
Student john = students.get(0);
|
||||
assertEquals(1L, john.getId().longValue());
|
||||
assertEquals(null, john.getAge());
|
||||
assertEquals("John", john.getName());
|
||||
}
|
||||
|
||||
private List<Student> getStudentsFromTable() {
|
||||
String selectQuery = "SELECT student FROM Student student";
|
||||
TypedQuery<Student> selectFromStudentTypedQuery = em.createQuery(selectQuery, Student.class);
|
||||
List<Student> students = selectFromStudentTypedQuery.getResultList();
|
||||
return students;
|
||||
}
|
||||
|
||||
private void persist(Student student) {
|
||||
em.getTransaction().begin();
|
||||
em.persist(student);
|
||||
em.getTransaction().commit();
|
||||
}
|
||||
|
||||
private Student createStudentWithRelevantDetails() {
|
||||
Student student = new Student();
|
||||
student.setAge(20); // the 'age' field has been annotated with @Transient
|
||||
student.setName("John");
|
||||
Date date = getDate();
|
||||
student.setBirthDate(date);
|
||||
student.setGender(Gender.MALE);
|
||||
return student;
|
||||
}
|
||||
|
||||
private Date getDate() {
|
||||
LocalDate localDate = LocalDate.of(2008, 7, 20);
|
||||
return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue