【发布时间】:2011-10-05 08:15:40
【问题描述】:
我有两个实体 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;
}
问题是关于任务实体中的字段 latest_status。我有一个提供 REST 接口的 Web 服务(基于 Jersey、Jackson 和 Tomcat)。有一个简单的 /RetrieveTask.json REST URI,它返回一个序列化的 Task 对象,并且效果很好。但现在我想在 Task 实体中添加一个字段,指示 Task 的最新状态(可以通过按字段时间戳排序的 TaskStatus 表确定)。最好的方法是什么?
我虽然它应该是一个瞬态字段,因为我将它存储在数据库的任务表中似乎没有意义。我应该在 JPA 服务方法中计算 Transient 字段 latest_status 并使用 JP QL 查询填写该字段吗?
【问题讨论】:
标签: json jpa jersey eclipselink jackson