Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA实体作为使用Jax RS中的application/json的方法中的对象_Java_Json_Jax Rs - Fatal编程技术网

Java JPA实体作为使用Jax RS中的application/json的方法中的对象

Java JPA实体作为使用Jax RS中的application/json的方法中的对象,java,json,jax-rs,Java,Json,Jax Rs,我的应用程序是基于对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 in

我的应用程序是基于对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;
}
请忽略
返回null暂时

在POST请求中,需要有一个json对象,如下所示:

'{"name":"Student 1", "index": 12, "id": "1", "timestamp" : "2014-07-21 12:19:12"}'
我怎样才能让json成为可能

'{"name":"Student 1", "index": 12}'

我看没有问题-参数
student
是一个新实例,id是自动生成的,您需要手动在版本化时间戳列中设置当前时间。有些实现甚至可以为您执行最后一个。

您可以添加JPA@EntityListeners,将version属性设置为当前时间戳。一个小技巧是强制类实现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());
        }
    }  
}