2014-01-09 3 views
0

Я бин сущности, которая имеет поле идентификатор Int объявлен как GenerationType.AUTO так, что идентификатор генерируется автоматически:JPA GenerationType.AUTO и установки поля вручную

@Entity 
public class CustomerPool implements Serializable 
{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    //setters getters 
} 

мне нужно, однако, чтобы сделать убедитесь, что у первого вставленного идентификатора CustomerPool есть идентификатор 0.

Я думал, что установка CustomerPool с идентификатором 0 имела бы приоритет над директивой, вместо этого у меня было другое поведение (с использованием JPA над EclipseLink), но в основном ID, который я установил, игнорируется.

. Можно ли установить идентификатор, который автоматически сгенерирован, если не указано иное, чтобы использовать указанный идентификатор, если это указано? Как-то я привык делать это на PHP и казался для меня довольно естественным поведением.

+1

'GenerationType.AUTO' говорит:«Я не» t заботиться о том, как генерируются значения! ' Следовательно, вам действительно все равно, это детализация вашего поставщика JPA и используемой СУБД. Если вам интересно, вы должны рассмотреть другие методы генерации или самостоятельно управлять поколением. – gregor

ответ

0

EclipseLink по умолчанию проверяет первичные ключи и интерпретирует 0 так же, как Null и unset values, и поэтому генерирует значение первичного ключа. Таким образом, вы можете установить значения, как они их использовали, они по умолчанию должны быть больше 0. Это настраивается с помощью ключа политики первичной проверки, как описано здесь: http://eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_primarykey.htm

Если 0 является действительным первичным ключом, вы можете установить свойство:

<property name="eclipselink.id-validation" value="NULL"/> 
Смежные вопросы