JPA瞬态注释

时间:2017-05-16 06:19:02

标签: java spring hibernate jackson

我正在学习SpringHibernate

我已阅读以下和其他教程资料。 据我所知,@Transient将阻止对象字段序列化并阻止它持久存储到数据库。

Transient variable in java

Transient annotation

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]

谢谢。

2 个答案:

答案 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;