Как найти сущность с наибольшим первичным ключом? - PullRequest
1 голос
/ 20 мая 2010

У меня есть объект LearningUnit, имеющий первичный ключ int. На самом деле больше ничего не имеет.

Entity Concept имеет следующие отношения с ним: @ManyToOne @Size (мин = 1, макс = 7) частный LearningUnit learningUnit;

В конструкторе Concept мне нужно получить LearningUnit с наибольшим первичным ключом. Если еще нет LearningUnit, я создаю его экземпляр. Затем я устанавливаю this.learningUnit для извлеченного / созданного экземпляра.

Наконец, я вызываю пустой конструктор Concept в блоке try-catch, чтобы управляющий объектами выполнял проверку кардинальности. Если выдается исключение (я ожидаю, что в том случае, если уже другие 7 концепций ссылаются на тот же LearningUnit. В этом случае я создаю экземпляр нового LearningUnit с новым большим первичным ключом.

Пожалуйста, укажите также, если таковые имеются, явные ловушки в моем изложенном выше алгоритме.

1 Ответ

1 голос
/ 20 мая 2010

Как найти сущность с наибольшим первичным ключом?

Вы можете сделать что-то вроде этого:

try {
    Query q = entityManager.createQuery("from LearningUnit unit order by unit.id desc");
    q.setMaxResults(1);
    LearningUnit unit = (LearningUnit) q.getSingleResult();
    // we found a LearningUnit
    // ...
} catch (NoResultException e) {
    // We didn't find any LearningUnit
    // ...
}

Пожалуйста, укажите также, если таковые имеются, явные ловушки в моем изложенном выше алгоритме.

На самом деле, я бы не стал использовать эту логику в конструкторе вашей сущности (где у вас, как правило, нет доступа к менеджеру сущностей, что неплохо). Я бы реализовал эту логику в методе обслуживания (где он принадлежит, потому что я думаю, что это бизнес-логика).

В качестве примечания, я думаю, что ограничение @Size должно быть на другой стороне ассоциации, на Collection.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...