powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA - получить значение поля сгенерированное триггером при вставке строки
25 сообщений из 37, страница 1 из 2
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542098
publexus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно как сконфигурировать(аннотировать) поле сущности, чтобы при сохранении (обновлении) объекта, это поле получало значение устанавливаемое триггером для данной операции на таблице?
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542101
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
@GeneratedValue
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542177
publexus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz@GeneratedValue
Пробовал:
Код: java
1.
2.
3.
	@Id
	@GeneratedValue
	private Long id;


но возвращается ошибка:
Код: plaintext
1.
ORA-02289: последовательность не существует
; SQL [n/a]
Непонятно, причем тут и какая последовательность.

Я так понимаю, что
@GeneratedValue = @GeneratedValue(strategy=GenerationType.AUTO)
а GenerationType.AUTO - Indicates that the persistence provider should pick an appropriate strategy for the particular database
не то что нужно.
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542212
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объясните внятно. Ваше свойство это Id? Ошибка возникает потому что у JPA провайдера для Oracle считается что id генерится через Sequence.
У вас Id создаётся через триггер? То есть это не просто свойство, а именно id?
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542223
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ух-ты. Похоже @GeneratedValue работает ислючительно в паре с @Id. Очередное гениальной решение со стороны JPA. Действительно, зачем может ещё понадобиться GeneratedValue, кроме как для Id.
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542235
publexus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Проверил, @GeneratedValue не работает для обычных полей, просто игнорирует занчение присвоенное триггером.
Я для @Id генерируется исключение указанное мной выше.
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542243
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если strategy=GenerationType.TABLE ?
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542245
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
publexusПроверил, @GeneratedValue не работает для обычных полей, просто игнорирует занчение присвоенное триггером.
Я для @Id генерируется исключение указанное мной выше.
Так а вам какой из двух нужен?
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542262
publexus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczа если strategy=GenerationType.TABLE ?
Это не то (там, насколько я понял, создается специальная таблица, обслуживающая нумерацию)

BlazkowiczТак а вам какой из двух нужен?
Нужны оба
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542266
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не гуру низкоуровневой комуникации с БД. Но, по-моему всё упирается явно в JDBC Return Generated Keys.
Получить можно только сгенерированые ключи. Отсюда, вероятно, и привязка к Id. В остальных случаях, нужно сущность перечитать после вставки явно.
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542272
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для Id, похоже, придется привязываться к JPA провайдеру:
http://docs.jboss.org/hibernate/core/3.2/api/org/hibernate/id/SelectGenerator.html
Для других свойств остаётся только явно перечитать.
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542284
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно и не перечитывать отдельным запросом. Специальный insert может вернуть все сгенерированые значения, а не только ключи.
Но как только этим воспользоваться из ЖПА - не понятно. Только ковырять провайдера.
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542355
publexus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Возможно.

Что ж, как вариант - процедуру persist в DAO переписать как persist+refresh
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542362
eJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
publexusСобственно как сконфигурировать(аннотировать) поле сущности, чтобы при сохранении (обновлении) объекта, это поле получало значение устанавливаемое триггером для данной операции на таблице?

как у вас описана таблица та часть где ИД и сам триггер, можете расписат ьподробнее?
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542390
publexus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eJackкак у вас описана таблица та часть где ИД и сам триггер, можете расписат ьподробнее?

Могу, конечно, привести простейший пример, но сама конкретная реализация триггера и таблицы не имеет значения в данном вопросе.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create table search_session (
		id						integer	not null,
		status_code				not null,
		constraint search_session_pk primary key(id)
);
/
create or replace trigger search_session_trg_bi
	before insert on search_session for each row
begin
	if :new.id is null then
		select id_seq.nextval into :new.id from dual;
	end if; 
	:new.status_code	:= 'NEW';
end;
/


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
@Entity
@Table(name="SEARCH_SESSION")
@NamedQuery(name="SearchSession.findAll", query="SELECT s FROM SearchSession s")
public class SearchSession implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@Column(NAME="ID", updatable = false)
	private Long id;

	@Column(name="STATUS_CODE")
	private String statusCode;

	public SearchSession() {
	}

	public Long getId() {
		return this.id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getStatusCode() {
		return this.statusCode;
	}

	public void setStatusCode(String statusCode) {
		this.statusCode = statusCode;
	}

}
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542461
eJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
publexuseJackкак у вас описана таблица та часть где ИД и сам триггер, можете расписат ьподробнее?

Могу, конечно, привести простейший пример, но сама конкретная реализация триггера и таблицы не имеет значения в данном вопросе.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create table search_session (
		id						integer	not null,
		status_code				not null,
		constraint search_session_pk primary key(id)
);
/
create or replace trigger search_session_trg_bi
	before insert on search_session for each row
begin
	if :new.id is null then
		select id_seq.nextval into :new.id from dual;
	end if; 
	:new.status_code	:= 'NEW';
end;
/


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
@Entity
@Table(name="SEARCH_SESSION")
@NamedQuery(name="SearchSession.findAll", query="SELECT s FROM SearchSession s")
public class SearchSession implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@Column(NAME="ID", updatable = false)
	private Long id;

	@Column(name="STATUS_CODE")
	private String statusCode;

	public SearchSession() {
	}

	public Long getId() {
		return this.id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getStatusCode() {
		return this.statusCode;
	}

	public void setStatusCode(String statusCode) {
		this.statusCode = statusCode;
	}

}



Блин - я в оракле полный NULL :) - в какой момент сработает триггер?
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542497
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eJackБлин - я в оракле полный NULL :) - в какой момент сработает триггер?
Написано же
before insert
не нужно быть экспертом в оракле.
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542518
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
publexus,

Я других вариантов не вижу.
Простой и не эффективный - перечитать после вставки.
Сложный, но эффективный - специальный INSERT запрос, чтобы вернул все сгенерированые значения и расковырять кишки JPA провайдера, чтобы эти значения обновить у сущности.
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542531
eJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Тогда правильно должно отработать на @GeneratedValue(strategy= IDENTITY)
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542536
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eJackТогда правильно должно отработать на @GeneratedValue(strategy= IDENTITY)
Не факт, что отработает. Там есть заморочки с Oracle и его JDBC драйвером. Завасит от JPA провайдера.
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542553
eJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczeJackТогда правильно должно отработать на @GeneratedValue(strategy= IDENTITY)
Не факт, что отработает. Там есть заморочки с Oracle и его JDBC драйвером. Завасит от JPA провайдера.

Да не факт, но автору протестировать, думаю, большого труда не составит.
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542578
publexus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eJack,

Да попробовал я это уже все, еще до того как открыть тему.
Если указать @GeneratedValue(strategy=GenerationType.IDENTITY), то:
Код: sql
1.
2.
org.springframework.dao.DataIntegrityViolationException: ORA-01858: вместо ожидаемой цифры обнаружен нецифровой символ
; SQL [n/a]; nested exception is org.hibernate.exception.DataException: ORA-01858: вместо ожидаемой цифры обнаружен нецифровой символ
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542584
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
publexuseJack,

Да попробовал я это уже все, еще до того как открыть тему.
Если указать @GeneratedValue(strategy=GenerationType.IDENTITY), то:
Код: sql
1.
2.
org.springframework.dao.DataIntegrityViolationException: ORA-01858: вместо ожидаемой цифры обнаружен нецифровой символ
; SQL [n/a]; nested exception is org.hibernate.exception.DataException: ORA-01858: вместо ожидаемой цифры обнаружен нецифровой символ


Это уже интереснее. А SQL лог смотрели? Что за запрос едет? Может это триггер упал?
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542587
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
publexus,

и stacktrace покажите, пожалуйста.
...
Рейтинг: 0 / 0
JPA - получить значение поля сгенерированное триггером при вставке строки
    #38542602
publexus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Извините, это уже только завтра.
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA - получить значение поля сгенерированное триггером при вставке строки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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