JPA does not return default value after saving

Tags: , , , ,



I faced a problem. A have an entity:

@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:

CREATE TABLE user (
  id SERIAL PRIMARY KEY,
  date_create TIMESTAMP NOT NULL DEFAULT now()
);

I have such logic:

@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.

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.

 @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
   }
}


Source: stackoverflow