Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate+oracle / 6 сообщений из 6, страница 1 из 1
17.01.2012, 13:31:37
    #37617905
Synchrophasotron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate+oracle
Всем доброго времени суток.
У меня скорее концептуальный вопрос. Как лучше использовать связку Hibernate + Oracle.
Сейчас столкнулся с несколькими проблемками:
1) обычно генерация ид на оракле построена через тригер и сиквенции.
при написании на java воспользовался слеудющей конструкцией
Код: java
1.
2.
3.
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "G1")
    @SequenceGenerator(name = "G1", sequenceName = "SQ_COMPANIES")


сиквенция все еще используется, а тригер уже нет вроде как ни есть хорошо
2) Есть ДАО который имеет метод insert, если такая запись уже есть в базе данных то метод выкидывает об этом ексепшен
а) можно реализовать через простой запрос select count(*) from tabel_name с последующей проверкой количества возвращаемых записей
б) можно через перехват ConstraintViolationException. Но тут проблема ведь я же не могу точно, когда произойдет flush

Буду благодарен за любые подсказки и советы
...
Рейтинг: 0 / 0
17.01.2012, 13:51:46
    #37617943
svenom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate+oracle
1) Сиквенсы с триггерами никак не связаны. Это вы где-то накосячили.
2) Значит делайте флаш руками сразу после вставки записи.
...
Рейтинг: 0 / 0
17.01.2012, 14:18:59
    #37618013
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate+oracle
2.
а как связан перехват ошибки с flush.
- делите все ошибки на 2 группы - которые в лог (подробности) и которые на верхний уровень.
Это туда где БЛ и начало БИЗНЕС-транзакции.
Вероятность наткнутся на "запись уже есть" - велика и её надо обработать, и не допускать (все проверки перед записью)
...
Рейтинг: 0 / 0
17.01.2012, 14:24:37
    #37618026
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate+oracle
Petro123а как связан перехват ошибки с flush.

Ну, кэш первого уровня же. SQLException выкидывается не там где session.save(), а там где сессия сбрасывает своё состояние в базу. Это может быть flush(), а может быть другой метод в той же транзакции позже.
...
Рейтинг: 0 / 0
17.01.2012, 14:34:03
    #37618061
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate+oracle
Blazkowicz,
Точно, был такой вопрос тут - отложенный эксепшн в другом стеке уже.
...
Рейтинг: 0 / 0
17.01.2012, 16:04:02
    #37618331
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate+oracle
Blazkowicz,
я вот что не пойму.
Между save и сбросом в БД одна строка или ~ 1 сек.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
Session session = HibernateUtil.currentSession();
Transaction tx= session.beginTransaction();
Cat princess = new Cat();
princess.setName("Princess");
princess.setSex('F');
princess.setWeight(7.4f);
session.save(princess);
tx.commit();
HibernateUtil.closeSession();


у нас как бы всё короткое на реквест, который сам менее секунды.
Ну будет Raise не save а на Close - обработка исключения всё равно должна быть?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate+oracle / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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