powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / [JPA] Primary key и Sequence
3 сообщений из 3, страница 1 из 1
[JPA] Primary key и Sequence
    #37931478
YetAnotherEntity
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть сущность User, у которого поле Id в базе (Oracle database) заполняется на триггере значением из объекта Sequence с именем "USER_ID_SEQUENCE". В классе сущности User'a поле id описано следующим образом:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Entity
@Table(name="USERS")
public class User implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@SequenceGenerator(name="USERS_USERID_GENERATOR", sequenceName="USER_ID_SEQUENCE")
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="USERS_USERID_GENERATOR")
	@Column(name="USER_ID", unique=true, nullable=false)
	private long userId;

        ...
}



Я вставляю пользователя вот в таким методом:
Код: java
1.
2.
3.
4.
5.
6.
    @Override
    public long addUser(User user) {
        entityMgr.persist(user); // ссылка на EntityManager хранится в поле данного "DAO" класса.
        long userId = user.getUserId();
        return userId;
    }



Как понятно из кода, хочу вернуть id вставленного пользователя. В итоге наблюдается неожиданное поведение. После вставки User'а смотрим в базу:
Код: plsql
1.
select USER_ID_SEQUENCE.CURRVAL from dual;

дает результат 4. Это количество пользователей, находящихся в таблице ДО вставки данного пользователя. Вывод: Sequence не инкрементировался на вставке. Но это ещё не всё. Пользователь в базе вставляется со значением ключа 154 , а в методе addUser в userId возвращается значение аж 254 . Подскажите пожалуйста, чем может быть вызвано такое поведение? Кто-нибудь сталкивался с подобной проблемой? Возможно, я чего-то не понял в плане политики генерации значения ключа.

Заранее благодарен. :)
...
Рейтинг: 0 / 0
[JPA] Primary key и Sequence
    #37931494
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, YetAnotherEntity!

> Есть сущность User, у которого поле Id в базе (Oracle database)
> заполняется на триггере

Для начала убери триггер. Или заполняй ID в нём только если он null

> Я вставляю пользователя вот в таким методом:
>
> @Override
> public long addUser(User user) {
> entityMgr.persist(user); // ссылка на EntityManager хранится в поле данного "DAO" класса.

А вот зря.
Кстати, persist не выполняет вставку. Нужен ещё merge. Ну и flush, хотя
он и выполняется автоматом.

> Кто-нибудь сталкивался с подобной проблемой? Возможно, я чего-то не
> понял в плане политики генерации значения ключа.

Вообще странное поведение, но две вышеуказанные вещи поправь.

--
Алексей
JID: alxt@ya.ru


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
[JPA] Primary key и Sequence
    #37931681
YetAnotherEntity
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GKS_Samara,

Спасибо большое. Дропнул триггер и установил для Sequence в сущности атрибут allocationSize, равный 1. Заработало.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / [JPA] Primary key и Sequence
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]