我正在学习Spring
,Hibernate
我已阅读以下和其他教程资料。
据我所知,@Transient
将阻止对象字段序列化并阻止它持久存储到数据库。
JPA Transient annotation and JSON
我的问题是,如果您有一个对象的字段,您不想持久保存到数据库,但是您希望在从服务器获取数据时检索该字段?
例如,在设置为MySql
的{{1}} createDate
上,当插入数据时,我的MySql会创建CURRENT_TIMESTAMP
。
MySql设置类似这样的
TIMESTAMP
我的控制器是
ALTER TABLE `books`
ADD COLUMN `dateCreated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON
UPDATE CURRENT_TIMESTAMP AFTER `dateCreated`;
我的返回数据是
@RequestMapping(path="/booklist", method = RequestMethod.GET, produces="application/json")
@ResponseBody
public Map<String, Object> getListBooks(@RequestParam(name="search", required=false) String search,
@RequestParam(name="ordering", required=false) String ordering){
Map<String, Object> data = new HashMap<String, Object>();
// Get list of books from server
List<Book> books = bookDao.getBookList(search, ordering);
System.out.println(books.get(0));
// do other things and return map
}
My Book对象如下
Book [id=1, name=Murach Jquery, 2rd Edition, ispn=978-1890774912, price=4.24, dateCreated=null, datePublished=null]
谢谢。
答案 0 :(得分:1)
@Transient
不会帮助您。
对实体类中的方法使用@PrePersist
。
@PrePersist
public void beforePersist() {
this.dateCreated = new Date();
}
使用beforePersist()
注释的 @PrePersist
方法将帮助您在想要保留新实体之前自动初始化实体字段。对于您的情况,您可以在此方法中初始化日期属性。每次坚持新实体时,您都不必手动设置它。
现在,当您从数据库中获取实体时,您将获得日期属性。
另请查看@PreUpdate
,它可以帮助您在更新实体时更新实体字段。
答案 1 :(得分:0)
对字段使用@Formula
注释,然后只传递列。见the example
@Formula("createDate")
private Timestamp dateCreated;