【问题标题】:Is it possible to do a query inside a JPA entity? (EclipseLink, Jersey, Jackson JSON)是否可以在 JPA 实体中进行查询? (EclipseLink,泽西岛,杰克逊 JSON)
【发布时间】: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


    【解决方案1】:

    实体可能有方法:

    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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多