Расширение первичного ключа
Интерфейс KeyGenerator определяет генератор первичных ключей. Он содержит один метод:
/**
* Генерирует значение первичного ключа
*
* @param clazz класс
* @return значение
*/
Object generateKeyValue(Class<?> clazz);
В метод передаётся объект класса текущей сущности, а возвращается сгенерированное значение первичного ключа типа Long или String.
Далее представлены две разные реализации для справки.
public class UUIDKeyGenerator implements KeyGenerator {
@Override
public Object generateKeyValue(Class<?> clazz) {
return UUIDUtils.getUUID32();
}
}
Возвращается сгенерированная строка UUID.
Здесь используется последовательность Oracle. Имя последовательности соответствует соглашению об именах: имя последовательности = seq_ + имя таблицы.
public class OracleKeyGenerator implements KeyGenerator {
@Override
public Object generateKeyValue(Class<?> clazz) {
// Получаем имя первичного ключа на основе имени сущности
String tableName = NameUtils.getUnderlineName(clazz.getSimpleName());
return String.format("`{{SEQ_%s.NEXTVAL}}`", tableName);
}
}
Первичный ключ Oracle особенный. В отличие от других первичных ключей, он не генерирует значения напрямую, а использует соответствующее имя последовательности. Значение первичного ключа получается при фактическом выполнении SQL в базе данных.
Символы {{ }}
используются для обозначения имени последовательности и предотвращения его интерпретации как имени таблицы и имени столбца при анализе SQL в программе.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )