TimestampMutabilityPlan [returns|https://github.com/hibernate/hibernate-orm/blob/6.2.5/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/JdbcTimestampJavaType.java#L310] java.sql.Timestamp which breaks equals().
Entity:
{code:java}package com.example.demobug;
import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.Temporal; import jakarta.persistence.TemporalType; import lombok.Data; import lombok.NoArgsConstructor;
import java.util.Date; import java.util.UUID;
@Entity @NoArgsConstructor @Data public class Company {
@Id private UUID id;
@Temporal(TemporalType.TIMESTAMP) private Date establishedAt;
} {code}
Test.
{code:java}package com.example.demobug;
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import java.util.Date; import java.util.UUID;
import static org.assertj.core.api.Assertions.assertThat;
@DataJpaTest class CompanyTest {
@Autowired public TestEntityManager entityManager;
@Test void shouldSaveEntity() { final Company company = createNewCompany();
final Company found = entityManager.find(Company.class, company.getId());
assertThat(found.getId()).isEqualTo(company.getId()); assertThat(found.getEstablishedAt()).isEqualTo(company.getEstablishedAt()); assertThat(found).isEqualTo(company); }
private Company createNewCompany() {
final Company company = new Company(); company.setId(UUID.randomUUID()); company.setEstablishedAt(new Date()); entityManager.persistAndFlush(company); entityManager.detach(company); entityManager.flush(); entityManager.clear(); return company; } }{code}
Assertion error:
{noformat}org.opentest4j.AssertionFailedError: expected: 2023-07-17T15:47:01.131 (java.util.Date) but was: 2023-07-17T15:47:01.131 (java.sql.Timestamp){noformat} |
|