2013-12-10 2 views
1

У меня есть код, который использует JPA аннотации для создания БД первичной последовательности key.A DB используется для создания PK.Am с помощью Oracle DBJPA с SequenceGenerator и GeneratedValue

@Id 
@Column(name = "rec_id", scale = 0) 
@GeneratedValue(generator = "RecIdSequence", strategy = GenerationType.SEQUENCE) 
@SequenceGenerator(name = "RecIdSequence", sequenceName = "P_REC_ID_SEQUENCE") 
public Long getRecordId() { 
    return outboundPackageRecordId; 
} 

Теперь мое понимание этого: Идентификатор последовательности, возвращаемый секвенсором БД, используется как rec_id. Это правильно?

DOC говорит:

Стратегия последовательности Последовательность Стратегия состоит из двух частей - определяющих последовательность имени и с использованием имени последовательности в одной или нескольких областях, в одном или нескольких классов. Аннотирование @SequenceGenerator используется для определения последовательности и принимает имя, начальное значение (по умолчанию - 1) и - размер распределения (по умолчанию - 50). Последовательность является глобальной для приложения и может использоваться одним или несколькими полями в одном или более классах . Стратегия ПОСЛЕДОВАТЕЛЬНОСТИ используются в @GeneratedValue аннотацию, чтобы прикрепить данное поле к ранее определенному имени последовательности:

@Entity 
@SequenceGenerator(name="seq", initialValue=1, allocationSize=100) // Define a sequence - might also be in another class: 
public class EntityWithSequenceId { 
    // Use the sequence that is defined above: 
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq") 
    @Id long id; 
} 

В отличии от AUTO и IDENTITY, стратегия ПОСЛЕДОВАТЕЛЬНОСТИ генерирует автоматическое значения, как только как новый объект объекта сохраняется (т.е. до совершить). Это может быть полезно, когда требуется значение первичного ключа ранее. Чтобы минимизировать круглые поездки на сервер базы данных, идентификаторы составляют , выделенные группами. Количество идентификаторов в каждом распределении указывается по атрибуту allocSize. Возможно, некоторые идентификаторы в данном распределении не будут использоваться. Поэтому эта стратегия делает не гарантией, что в значениях последовательности не будет пробелов.

ответ

-1

Это будет использовать следующее значение из вашей последовательности P_REC_ID_SEQUENCE.

Это также зависит от того, какую базу данных вы используете. Вы можете определить последовательности в Postgres, но не MySQL.

Если вы используете MYSQL, то вы можете использовать Auto-Incremement, но вам не нужно будет определять последовательность.

Если вы используете ORACLE базы данных можно определить последовательность, как

CREATE SEQUENCE emp_sequence 
     INCREMENT BY 1 
     START WITH 1 

Теперь, если текущее значение последовательности 100, то следующий будет 101. Я надеюсь, что это имеет смысл.

+0

@ Makky.Мы используем оракул DB. Также путем следующего значения u среднее значение, перенастроенное P_REC_ID_SEQUENCE, право? – user93796

+0

Да. следующее значение возвращается из вашего P_REC_ID_SEQUENCE. – Makky

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