BAEL-5985 Hibernate @CreationTimestamp and @UpdateTimestamp (#13690)
* BAEL-5985 Hibernate @CreationTimestamp and @UpdateTimestamp * BAEL-5985 Remove unnecessary imports * BAEL-5985 Swap order in assertEquals --------- Co-authored-by: Mariusz Kaczmarczyk <to@mariu.sh>
This commit is contained in:
parent
28c8893b38
commit
e9a2b58924
|
@ -0,0 +1,57 @@
|
||||||
|
package com.baeldung.hibernate.creationupdatetimestamp.model;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
|
||||||
|
import org.hibernate.annotations.CreationTimestamp;
|
||||||
|
import org.hibernate.annotations.UpdateTimestamp;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public class Book {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue
|
||||||
|
private Long id;
|
||||||
|
private String title;
|
||||||
|
@CreationTimestamp
|
||||||
|
private Instant createdOn;
|
||||||
|
@UpdateTimestamp
|
||||||
|
private Instant lastUpdatedOn;
|
||||||
|
|
||||||
|
public Book() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTitle(String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Instant getCreatedOn() {
|
||||||
|
return createdOn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCreatedOn(Instant createdOn) {
|
||||||
|
this.createdOn = createdOn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Instant getLastUpdatedOn() {
|
||||||
|
return lastUpdatedOn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLastUpdatedOn(Instant lastUpdatedOn) {
|
||||||
|
this.lastUpdatedOn = lastUpdatedOn;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,116 @@
|
||||||
|
package com.baeldung.hibernate.creationupdatetimestamp;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
import org.h2.Driver;
|
||||||
|
import org.hibernate.Session;
|
||||||
|
import org.hibernate.SessionFactory;
|
||||||
|
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
||||||
|
import org.hibernate.cfg.Configuration;
|
||||||
|
import org.hibernate.dialect.H2Dialect;
|
||||||
|
import org.hibernate.service.ServiceRegistry;
|
||||||
|
import org.junit.jupiter.api.AfterAll;
|
||||||
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import com.baeldung.hibernate.creationupdatetimestamp.model.Book;
|
||||||
|
|
||||||
|
class HibernateCreationUpdateTimestampIntegrationTest {
|
||||||
|
|
||||||
|
private static SessionFactory sessionFactory;
|
||||||
|
|
||||||
|
private Session session;
|
||||||
|
|
||||||
|
@BeforeAll
|
||||||
|
public static void beforeTests() {
|
||||||
|
Configuration configuration = new Configuration().addAnnotatedClass(Book.class)
|
||||||
|
.setProperty("hibernate.dialect", H2Dialect.class.getName())
|
||||||
|
.setProperty("hibernate.connection.driver_class", Driver.class.getName())
|
||||||
|
.setProperty("hibernate.connection.url", "jdbc:h2:mem:test")
|
||||||
|
.setProperty("hibernate.connection.username", "sa")
|
||||||
|
.setProperty("hibernate.connection.password", "")
|
||||||
|
.setProperty("hibernate.hbm2ddl.auto", "update");
|
||||||
|
|
||||||
|
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenCreatingEntity_ThenCreatedOnIsSet() {
|
||||||
|
session = sessionFactory.openSession();
|
||||||
|
session.beginTransaction();
|
||||||
|
Book book = new Book();
|
||||||
|
|
||||||
|
session.save(book);
|
||||||
|
session.getTransaction()
|
||||||
|
.commit();
|
||||||
|
session.close();
|
||||||
|
|
||||||
|
assertNotNull(book.getCreatedOn());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenCreatingEntity_ThenCreatedOnAndLastUpdatedOnAreBothSet() {
|
||||||
|
session = sessionFactory.openSession();
|
||||||
|
session.beginTransaction();
|
||||||
|
Book book = new Book();
|
||||||
|
|
||||||
|
session.save(book);
|
||||||
|
session.getTransaction()
|
||||||
|
.commit();
|
||||||
|
session.close();
|
||||||
|
|
||||||
|
assertNotNull(book.getCreatedOn());
|
||||||
|
assertNotNull(book.getLastUpdatedOn());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenCreatingEntity_ThenCreatedOnAndLastUpdatedOnAreNotEqual() {
|
||||||
|
session = sessionFactory.openSession();
|
||||||
|
session.beginTransaction();
|
||||||
|
Book book = new Book();
|
||||||
|
|
||||||
|
session.save(book);
|
||||||
|
session.getTransaction()
|
||||||
|
.commit();
|
||||||
|
session.close();
|
||||||
|
|
||||||
|
assertNotEquals(book.getCreatedOn(), book.getLastUpdatedOn());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenUpdatingEntity_ThenLastUpdatedOnIsUpdatedAndCreatedOnStaysTheSame() {
|
||||||
|
session = sessionFactory.openSession();
|
||||||
|
session.beginTransaction();
|
||||||
|
Book book = new Book();
|
||||||
|
session.save(book);
|
||||||
|
session.flush();
|
||||||
|
Instant createdOnAfterCreation = book.getCreatedOn();
|
||||||
|
Instant lastUpdatedOnAfterCreation = book.getLastUpdatedOn();
|
||||||
|
|
||||||
|
String newName = "newName";
|
||||||
|
book.setTitle(newName);
|
||||||
|
session.getTransaction()
|
||||||
|
.commit();
|
||||||
|
session.close();
|
||||||
|
Instant createdOnAfterUpdate = book.getCreatedOn();
|
||||||
|
Instant lastUpdatedOnAfterUpdate = book.getLastUpdatedOn();
|
||||||
|
|
||||||
|
assertEquals(newName, book.getTitle());
|
||||||
|
assertNotNull(createdOnAfterUpdate);
|
||||||
|
assertNotNull(lastUpdatedOnAfterUpdate);
|
||||||
|
assertEquals(createdOnAfterCreation, createdOnAfterUpdate);
|
||||||
|
assertNotEquals(lastUpdatedOnAfterCreation, lastUpdatedOnAfterUpdate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterAll
|
||||||
|
static void afterTests() {
|
||||||
|
sessionFactory.close();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue