【发布时间】:2020-08-18 10:33:22
【问题描述】:
我遇到了一个问题。 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 函数 now() 设置,但 JPA 在创建的实体中不返回它。
有人知道如何解决这个问题吗?不使用 Hibernate 或 Spring 特定工具。只是 JPA。
【问题讨论】:
-
您需要从数据库中刷新实体,否则它将无法工作。
-
我使用了 'saveAndFlush' 但它没有帮助(我可以在不调用其他查询的情况下获取实际的实体数据吗?
-
createdUser = userRepository.saveAndFlush(createdUser);? -
如前所述使用刷新(这是实体管理器上的实际方法)。
-
'saveAndFlush' 没有帮助我(从 EntityManager 刷新做到了!谢谢!
标签: java spring postgresql jpa spring-data-jpa