Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA - получить значение поля сгенерированное триггером при вставке строки / 25 сообщений из 37, страница 1 из 2
29.01.2014, 14:38
    #38542098
publexus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA - получить значение поля сгенерированное триггером при вставке строки
Собственно как сконфигурировать(аннотировать) поле сущности, чтобы при сохранении (обновлении) объекта, это поле получало значение устанавливаемое триггером для данной операции на таблице?
...
Рейтинг: 0 / 0
29.01.2014, 14:39
    #38542101
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA - получить значение поля сгенерированное триггером при вставке строки
@GeneratedValue
...
Рейтинг: 0 / 0
29.01.2014, 15:03
    #38542177
publexus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA - получить значение поля сгенерированное триггером при вставке строки
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
29.01.2014, 15:20
    #38542212
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA - получить значение поля сгенерированное триггером при вставке строки
Объясните внятно. Ваше свойство это Id? Ошибка возникает потому что у JPA провайдера для Oracle считается что id генерится через Sequence.
У вас Id создаётся через триггер? То есть это не просто свойство, а именно id?
...
Рейтинг: 0 / 0
29.01.2014, 15:24
    #38542223
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA - получить значение поля сгенерированное триггером при вставке строки
Ух-ты. Похоже @GeneratedValue работает ислючительно в паре с @Id. Очередное гениальной решение со стороны JPA. Действительно, зачем может ещё понадобиться GeneratedValue, кроме как для Id.
...
Рейтинг: 0 / 0
29.01.2014, 15:28
    #38542235
publexus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA - получить значение поля сгенерированное триггером при вставке строки
Blazkowicz,

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

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

Возможно.

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

как у вас описана таблица та часть где ИД и сам триггер, можете расписат ьподробнее?
...
Рейтинг: 0 / 0
29.01.2014, 16:44
    #38542390
publexus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA - получить значение поля сгенерированное триггером при вставке строки
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
29.01.2014, 17:17
    #38542461
eJack
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA - получить значение поля сгенерированное триггером при вставке строки
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
29.01.2014, 17:30
    #38542497
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA - получить значение поля сгенерированное триггером при вставке строки
eJackБлин - я в оракле полный NULL :) - в какой момент сработает триггер?
Написано же
before insert
не нужно быть экспертом в оракле.
...
Рейтинг: 0 / 0
29.01.2014, 17:36
    #38542518
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA - получить значение поля сгенерированное триггером при вставке строки
publexus,

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

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

Да не факт, но автору протестировать, думаю, большого труда не составит.
...
Рейтинг: 0 / 0
29.01.2014, 18:03
    #38542578
publexus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA - получить значение поля сгенерированное триггером при вставке строки
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
29.01.2014, 18:06
    #38542584
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA - получить значение поля сгенерированное триггером при вставке строки
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
29.01.2014, 18:07
    #38542587
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA - получить значение поля сгенерированное триггером при вставке строки
publexus,

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

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


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