我的应用程序是根据对JaxRS服务的请求,使用JPA执行一些数据库操作。
以下是我用于JPA的实体类。
import javax.annotation.Generated;
import javax.persistence.*;
import java.util.Date;
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private int index;
@Column(length = 25)
private String name;
@Version
@Column(length = 45)
private Date timestamp;
public Student(int index, String name) {
this.index = index;
this.name = name;
}
public Student() {
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
以下是我的JaxRS服务中的方法
@POST
@Path("add")
@Consumes("application/json")
public Response addStudent(Student student) {
return null;
}
请暂时忽略return null;
。
在POST请求中,这需要有一个像以下一样的json对象,
'{"name":"Student 1", "index": 12, "id": "1", "timestamp" : "2014-07-21 12:19:12"}'
如何让json成为可能,
'{"name":"Student 1", "index": 12}'
答案 0 :(得分:0)
我认为没有问题 - 参数student
是一个新实例,id是自动生成的,您需要手动设置版本化时间戳列中的当前时间。有些实现甚至可以为你做最后一个。
答案 1 :(得分:0)
您可以添加将版本属性设置为当前时间戳的JPA @EntityListeners。一个小技巧是强制你的类实现一些可被EntityListener类识别的接口:这样,所有可版本化的类都会自动在@PrePersist和@PreUpdate事件上进行版本控制:
public interface IVersionable {
public void setTimestamp(Date timestamp);
}
@Entity
@EntityListeners(MyEntityListener.class)
public class Student implements IVersionable {
// getters/setters omitted
public void setTimestamp(Date timestamp) {
this.timestamp = timestamp;
}
}
public class MyEntityListener {
@PrePersist
@PreUpdate
public void prePersistUpdate(final Object entity) {
if (entity instanceof IVersionable) {
((IVersionable) entity).setTimestamp(new Date());
}
}
}