GenerationType.AUTO vs GenerationType.IDENTITY в спящем режиме
В настоящее время мы используем mysql в качестве базы данных, и мы используем
@Generated Value(strategy = GenerationType.IDENTITY)
Он отлично работает в определенной ситуации, когда нам нужно перенести нашу базу данных в Oracle в то время, когда она не работает должным образом. Если кто-нибудь знает, какая фактическая разница присутствует за этим и как она работает?
Ответы
Ответ 1
Как он мог "работать правильно" (вы не определяете базовую информацию, как то, что вы подразумеваете под этим) с Oracle? Я не вижу актуальности AUTO
для вашего вопроса - это просто позволяет реализации выбрать то, что она хочет использовать.
" IDENTITY
" (согласно JPA javadocs и spec - то, о чем вы должны говорить) означает автоинкремент. В Oracle такой концепции нет, но в MySQL, SQLServer и некоторых других. Я бы ожидал, что любая достойная реализация JPA будет отмечать ошибку, даже когда она пытается это сделать.
Oracle могла бы использовать стратегии " SEQUENCE
" или " TABLE
", однако
Ответ 2
Цитирование Java Persistence/Identity and Sequencing:
В последовательности идентификации используются специальные столбцы IDENTITY в базе данных, чтобы позволить базе данных автоматически присваивать идентификатор объекту при его вставке. Столбцы идентификаторов поддерживаются во многих базах данных, таких как MySQL, DB2, SQL Server, Sybase и Postgres. Oracle не поддерживает столбцы IDENTITY, но их можно моделировать с помощью объектов последовательности и триггеров.
поэтому я предпочитаю использовать SEQUENCE вместо этого
Объекты последовательности используют специальные объекты базы данных для генерации идентификаторов. Объекты последовательности поддерживаются только в некоторых базах данных, таких как Oracle, DB2 и Postgres. Обычно объект SEQUENCE имеет имя, INCREMENT и другие параметры объекта базы данных. Каждый раз, когда выбран.NEXTVAL, последовательность увеличивается с помощью INCREMENT.
Пример:
@Entity
public class Employee {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="EMP_SEQ")
@SequenceGenerator(name="EMP_SEQ", sequenceName="EMP_SEQ", allocationSize=100)
private long id;
...
}