2009-08-24 3 views
1

Я создаю запись виджетов с Hibernate. Это довольно просто. У меня есть файл hbm.xml, описывающий объект, класс DAO, который создает и сохраняет их и т. Д.Вставка сгенерированного значения в запись спящего режима

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

Hibernate идеально подходит для установки столбцов идентификаторов автоматически, и для меня имеет смысл установить уникальное значение для другого столбца в соответствии с формулой max (sortIndex) +1 или в соответствии с некоторым увеличением значение генератора последовательности, но я не могу найти ссылку в документации для такого рода вещей. Может ли кто-нибудь указать мне в правильном направлении?

Один из подходов, который возник в сознании, состоял в том, чтобы просто запросить для самого высокого sortIndex вручную, но я начал беспокоиться о двух разных транзакциях, обнаруживающих один и тот же новый sortIndex.

ответ

1

Ненавижу говорить об этом, но я думаю, что вам лучше всего делать это программно. Просто что-то в линиях:

public void saveNewWidget(Widget widget) { 
    Session session = ...; 
    int sortIndex = ((Integer) session.createQuery("select max(w.sortIndex) from Widget w").uniqueResult()) + 1; 
    widget.setSortIndex(sortIndex); 
    session.save(widget); 
} 

(Примечание: не поточно-я не могу видеть хороший способ, чтобы сделать его безопасным за исключением путем блокировки всей таблицы я буду винить усталость...)

Причина в том, что он не кажется ни UserType, ни обычным Interceptor может вам помочь. Итак, если вы действительно хотите сделать это самостоятельно, вам, возможно, придется написать свой собственный ClassPersister. И это путь к безумию.

Смежные вопросы