是否可以在JPA实体中进行查询? (EclipseLink,Jersey,Jackson JSON)

时间:2011-10-05 08:15:40

标签: json jpa jersey eclipselink jackson

我有两个实体Task和TaskStatus。任务可以具有TaskStatuses(1-n)的历史记录。我在下面列出了它们(剥离以消除混乱)。

@Entity
public class Task implements Serializable {
    @Id
    private int task_id;
    private String name;
    private String description;

    @JsonManagedReference("task-taskstatuses")
    @OneToMany(fetch = FetchType.LAZY, mappedBy="task")
    private Collection<TaskStatus> task statuses;

    @Transient private String latest_status; // this field I want to calculate based on the task statuses
}


@Entity
@IdClass(TaskStatusId.class)
public class TaskStatus implements Serializable {
    @Id
    @ManyToOne
    @JoinColumn(name="task_id", referencedColumnName="task_id")
    private Task task;
    @Id
    private Timestamp timestamp;
    private String status;
    private String username;
}

问题是关于Task实体中的字段latest_status。我有一个提供REST接口的Web服务(基于Jersey,Jackson和Tomcat)。有一个简单的/RetrieveTask.json REST URI,它返回一个序列化的Task对象,并且工作正常。但是现在我想在Task实体中添加一个字段,指示Task的最新状态(可以通过在字段时间戳上排序的TaskStatus表来确定)。最好的方法是什么?

我虽然它应该是一个Transient字段,因为我似乎没有意义将它存储在数据库的Task表中。我应该在JPA服务方法中计算Transient字段latest_status并使用JP QL查询填充其中的字段吗?

1 个答案:

答案 0 :(得分:0)

实体可能有方法:

public String getLatestStatus() {
    // sort a copy of the list of task status by timestamp
    // return the status of the last element of the copy of the list
}