Можно ли сделать запрос внутри объекта JPA? (EclipseLink, Джерси, Джексон, JSON) - PullRequest
1 голос
/ 05 октября 2011

У меня есть две сущности 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 в объекте Task.У меня есть веб-сервис, который предлагает интерфейс REST (на основе Джерси, Джексона и Tomcat).Существует простой RET URI /RetrieveTask.json, который возвращает сериализованный объект Task, и он работает отлично.Но теперь я хотел добавить в сущность «Задача» поле, указывающее последний статус задачи (что можно определить по таблице TaskStatus, отсортированной по метке времени поля).Каков наилучший способ сделать это?

Я думаю, это должно быть поле Transient, потому что мне кажется, не имеет смысла хранить его в таблице Task в базе данных.Должен ли я рассчитать это переходное поле latest_status в методе службы JPA и заполнить его там с помощью запроса JP QL?

1 Ответ

0 голосов
/ 05 октября 2011

Сущности могут иметь методы:

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
}
...