[英]JPA does not return default value after saving
我遇到了一个问题。 A有一个实体:
@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:
CREATE TABLE user (
id SERIAL PRIMARY KEY,
date_create TIMESTAMP NOT NULL DEFAULT now()
);
我有这样的逻辑:
@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
}
}
字段dateCreate由 DB function now() 设置,但在创建的实体中不由 JPA 返回。
有谁知道如何解决这个问题? 不使用 Hibernate 或 Spring 特定工具。 只是 JPA。
保存到数据库后需要refresh
数据,得到object最新的state,如entityManager.refresh(createdUser)
您可以按照下面的说明使用它。
@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
}
}
您可以使用注释 @PrePersist 在持久化之前创建日期。
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue
private Integer id;
@Column(name = "date_create")
@Temporal(TemporalType.TIMESTAMP)
private Date dateCreate;
@PrePersist
private void onCreate() {
dateCreate= new Date();
}
}
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue
private Integer id;
@Column(name = "date_create", insertable = false, updatable = false, nullable = false)
private LocaleDate dateCreate;
}
要么
private LocaleDateTime dateCreate;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.