如何解决保存后,JPA不返回默认值
我遇到了问题。 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 由数据库函数now()设置,但JPA在创建的实体中不返回。
有人知道如何解决此问题吗?无需使用Hibernate或Spring专用工具。只是JPA。
解决方法
您可以使用注释@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();
}
}
,
将数据保存到数据库后,需要refresh
,以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
}
}
,
@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;
}
OR
private LocaleDateTime dateCreate;
- LocaleDate是将日期存储到数据库中而无需时间。
- LocaleDateTime是将日期和时间存储到数据库中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。