/**
* Created by Pawel_Solarski on 21.09.2016.
*/
package org.hibernate.bugs;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import javax.persistence.*;
import java.util.Date;
import java.util.List;
/**
* This template demonstrates how to develop a test case for Hibernate ORM, using the Java Persistence API.
*/
public class JPAUnitFieldResultMappingTestCase {
private EntityManagerFactory entityManagerFactory;
@Before
public void init() {
entityManagerFactory = Persistence.createEntityManagerFactory("mysql_hbm");
}
@After
public void destroy() {
entityManagerFactory.close();
}
@Test
public void shouldMapNativeQueryUsingFieldResultMapping() throws Exception {
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.persist(new AuditLog(1L, "foo", new Date()));
entityManager.persist(new AuditLog(2L, "bar", new Date()));
entityManager.getTransaction().commit();
entityManager.close();
entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
List<AuditLog> list = entityManager.createNamedQuery("getAuditLogByUsername", AuditLog.class).setParameter("username", "foo").getResultList();
list.stream().forEach(System.out::println);
entityManager.getTransaction().commit();
entityManager.close();
}
}
@Entity
@SqlResultSetMapping(
name = "auditLogResultSet",
entities = @EntityResult(
entityClass = AuditLog.class,
fields = {
@FieldResult(name = "id", column = "id"),
@FieldResult(name = "ts", column = "insert_date"),
@FieldResult(name = "username", column = "username")
}
)
)
@NamedNativeQuery(
name = "getAuditLogByUsername",
query = "select id, username, ts as insert_date from auditlog where username = :username",
resultSetMapping = "auditLogResultSet"
)
class AuditLog {
@Id
private Long id;
private String username;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "ts")
private Date date;
public AuditLog() {
}
public AuditLog(Long id, String username, Date date) {
this.id = id;
this.username = username;
this.date = date;
}
public AuditLog(Long id, String username) {
this(id, username, new Date());
}
public Long getId() {
return id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public String toString() {
return "AuditLog{" +
"id=" + id +
", username='" + username + '\'' +
", date=" + date +
'}';
}
}