我有两个实体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查询填充其中的字段吗?
答案 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
}