Skip to content

Commit e9a2b58

Browse files
mariuszdbMariusz Kaczmarczyk
andauthored
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>
1 parent 28c8893 commit e9a2b58

2 files changed

Lines changed: 173 additions & 0 deletions

File tree

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.baeldung.hibernate.creationupdatetimestamp.model;
2+
3+
import java.time.Instant;
4+
5+
import javax.persistence.Entity;
6+
import javax.persistence.GeneratedValue;
7+
import javax.persistence.Id;
8+
9+
import org.hibernate.annotations.CreationTimestamp;
10+
import org.hibernate.annotations.UpdateTimestamp;
11+
12+
@Entity
13+
public class Book {
14+
@Id
15+
@GeneratedValue
16+
private Long id;
17+
private String title;
18+
@CreationTimestamp
19+
private Instant createdOn;
20+
@UpdateTimestamp
21+
private Instant lastUpdatedOn;
22+
23+
public Book() {
24+
}
25+
26+
public Long getId() {
27+
return id;
28+
}
29+
30+
public void setId(Long id) {
31+
this.id = id;
32+
}
33+
34+
public String getTitle() {
35+
return title;
36+
}
37+
38+
public void setTitle(String title) {
39+
this.title = title;
40+
}
41+
42+
public Instant getCreatedOn() {
43+
return createdOn;
44+
}
45+
46+
public void setCreatedOn(Instant createdOn) {
47+
this.createdOn = createdOn;
48+
}
49+
50+
public Instant getLastUpdatedOn() {
51+
return lastUpdatedOn;
52+
}
53+
54+
public void setLastUpdatedOn(Instant lastUpdatedOn) {
55+
this.lastUpdatedOn = lastUpdatedOn;
56+
}
57+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
package com.baeldung.hibernate.creationupdatetimestamp;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertNotEquals;
5+
import static org.junit.jupiter.api.Assertions.assertNotNull;
6+
7+
import java.time.Instant;
8+
9+
import org.h2.Driver;
10+
import org.hibernate.Session;
11+
import org.hibernate.SessionFactory;
12+
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
13+
import org.hibernate.cfg.Configuration;
14+
import org.hibernate.dialect.H2Dialect;
15+
import org.hibernate.service.ServiceRegistry;
16+
import org.junit.jupiter.api.AfterAll;
17+
import org.junit.jupiter.api.BeforeAll;
18+
import org.junit.jupiter.api.Test;
19+
20+
import com.baeldung.hibernate.creationupdatetimestamp.model.Book;
21+
22+
class HibernateCreationUpdateTimestampIntegrationTest {
23+
24+
private static SessionFactory sessionFactory;
25+
26+
private Session session;
27+
28+
@BeforeAll
29+
public static void beforeTests() {
30+
Configuration configuration = new Configuration().addAnnotatedClass(Book.class)
31+
.setProperty("hibernate.dialect", H2Dialect.class.getName())
32+
.setProperty("hibernate.connection.driver_class", Driver.class.getName())
33+
.setProperty("hibernate.connection.url", "jdbc:h2:mem:test")
34+
.setProperty("hibernate.connection.username", "sa")
35+
.setProperty("hibernate.connection.password", "")
36+
.setProperty("hibernate.hbm2ddl.auto", "update");
37+
38+
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties())
39+
.build();
40+
41+
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
42+
}
43+
44+
@Test
45+
void whenCreatingEntity_ThenCreatedOnIsSet() {
46+
session = sessionFactory.openSession();
47+
session.beginTransaction();
48+
Book book = new Book();
49+
50+
session.save(book);
51+
session.getTransaction()
52+
.commit();
53+
session.close();
54+
55+
assertNotNull(book.getCreatedOn());
56+
}
57+
58+
@Test
59+
void whenCreatingEntity_ThenCreatedOnAndLastUpdatedOnAreBothSet() {
60+
session = sessionFactory.openSession();
61+
session.beginTransaction();
62+
Book book = new Book();
63+
64+
session.save(book);
65+
session.getTransaction()
66+
.commit();
67+
session.close();
68+
69+
assertNotNull(book.getCreatedOn());
70+
assertNotNull(book.getLastUpdatedOn());
71+
}
72+
73+
@Test
74+
void whenCreatingEntity_ThenCreatedOnAndLastUpdatedOnAreNotEqual() {
75+
session = sessionFactory.openSession();
76+
session.beginTransaction();
77+
Book book = new Book();
78+
79+
session.save(book);
80+
session.getTransaction()
81+
.commit();
82+
session.close();
83+
84+
assertNotEquals(book.getCreatedOn(), book.getLastUpdatedOn());
85+
}
86+
87+
@Test
88+
void whenUpdatingEntity_ThenLastUpdatedOnIsUpdatedAndCreatedOnStaysTheSame() {
89+
session = sessionFactory.openSession();
90+
session.beginTransaction();
91+
Book book = new Book();
92+
session.save(book);
93+
session.flush();
94+
Instant createdOnAfterCreation = book.getCreatedOn();
95+
Instant lastUpdatedOnAfterCreation = book.getLastUpdatedOn();
96+
97+
String newName = "newName";
98+
book.setTitle(newName);
99+
session.getTransaction()
100+
.commit();
101+
session.close();
102+
Instant createdOnAfterUpdate = book.getCreatedOn();
103+
Instant lastUpdatedOnAfterUpdate = book.getLastUpdatedOn();
104+
105+
assertEquals(newName, book.getTitle());
106+
assertNotNull(createdOnAfterUpdate);
107+
assertNotNull(lastUpdatedOnAfterUpdate);
108+
assertEquals(createdOnAfterCreation, createdOnAfterUpdate);
109+
assertNotEquals(lastUpdatedOnAfterCreation, lastUpdatedOnAfterUpdate);
110+
}
111+
112+
@AfterAll
113+
static void afterTests() {
114+
sessionFactory.close();
115+
}
116+
}

0 commit comments

Comments
 (0)