I faced a problem. A have an entity:
JavaScript
x
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue
private Integer id;
@Column(name = "date_create", insertable = false, updatable = false, nullable = false)
private Date dateCreate;
}
DDL of the related table:
JavaScript
CREATE TABLE user (
id SERIAL PRIMARY KEY,
date_create TIMESTAMP NOT NULL DEFAULT now()
);
I have such logic:
JavaScript
@Service
public class Service1 {
@Autowired
private UserRepository userRepository;
@Transactional
public User createUser() {
return userRepository(new User());
}
}
@Service
public class Service2 {
@Autowired
private Service1 service1;
public void createUser() {
User createdUser = service1.createUser();
System.out.println(createdUser.getDateCreate()); // actual result : null
}
}
Field dateCreate is set by DB function now() but it is not returned by JPA in created entity.
Does anyone know how to solve this problem? Without using Hibernate or Spring specific tools. Just JPA.
Advertisement
Answer
You need to refresh
the data after saving it to the database and to get the latest state of the object, as entityManager.refresh(createdUser)
You can use it as mentioned below.
JavaScript
@Service
public class Service2 {
@Autowired
private Service1 service1;
@PersistenceContext
private EntityManager entityManager;
public void createUser() {
User createdUser = service1.createUser();
entityManager.refresh(createdUser);
System.out.println(createdUser.getDateCreate()); // actual result : null
}
}