В нашем приложении все наши объекты легко удаляются путем установки deletedAt
в качестве даты удаления.
В одном из случаев я пытаюсь запросить объект с одним из его отношений,но включайте только «не удаленные».
Объект, который я пытаюсь запросить: Goal
:
class Goal extends AuditableEntity {
String title
String definition
RrmGoalType goalType
Project project
static hasMany = [perceptions: Perception]
static hasOne = [utilization: RrmUtilization]
static mapping = {
table 'rrm_goal'
title column: 'title', type: 'text'
definition type: 'text'
goalType column: 'goal_type', enumType: 'string'
perceptions sort: 'definition', order: 'asc'
autoTimestamp true
}
...
}
Где AuditableEntity
:
abstract class AuditableEntity implements Serializable {
Date dateCreated
User createdBy
Date lastUpdated
User updatedBy
Date deletedAt
User deletedBy
static constraints = {
createdBy nullable: true
updatedBy nullable: true
deletedBy nullable: true
dateCreated nullable: true
lastUpdated nullable: true
deletedAt nullable: true
}
}
И мне нужно запросить его с прикрепленным perceptions
.
Я пытаюсь использовать namedQuery
следующим образом:
notDeletedByProjectIdAndIdAndProjectOwnerId { Long projectId, Long goalId, Long userId ->
isNull 'deletedAt'
eq 'id', goalId
createAlias('perceptions', 'perceptions', JoinType.LEFT_OUTER_JOIN)
isNull 'perceptions.deletedAt'
project {
eq 'id', projectId
isNull 'deletedAt'
owner {
eq 'id', userId
}
}
}
Он выполняется, нопо какой-то причине он возвращает только один элемент из списка восприятий.
Что мне не хватает?
НЕКОТОРЫЙ ПРОГРЕСС
Я думаю, что яначинаю понимать механизм.Я получаю цель следующим образом:
Goal.notDeletedByProjectIdAndIdAndProjectOwnerId(projectId, goalId, userId).get()
И gorm возвращает мне первый результат из набора результатов, поэтому прикреплено только одно восприятие.
Как запросить объект Goalи получить все не удаленные восприятия (в одном запросе)?
Как правильно получить граф объектов из этого типа запроса?
Другой вопрос: можно ли настроитьстремитесь выбрать только не удаленные объекты (или что-то еще)?