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