powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
164 сообщений из 164, показаны все 7 страниц
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40084920
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет

Есть две сущности ,ака таблицы

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
@Entity
@Getter
@Setter
public class A {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE)
  private Long id;

  private String name;

  @OneToMany(mappedBy = "a", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
  List<B> bList;


}




ее DDL

Код: plsql
1.
2.
3.
4.
create table A(
  id bigint DEFAULT nextval('a_id_seq') primary key ,
  name text
);



вторая сущность и ее таблица

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@Entity
@Getter
@Setter
public class B {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  private String name;

  @ManyToOne
  @JoinColumn(name="a_id", nullable=false)
  private A a;
}



ее ддл

Код: plsql
1.
2.
3.
4.
5.
6.
create table B(
  id bigint generated always as identity primary key,
  name text,
  a_id bigint references a on delete cascade

)




вопрос в чем ,в том что сейчас если я беру обычный джава метод и генерую сначала список объектов класса B, затем генериую спискок объектов класса A и туда делаю set <List<B>> и далее делаю saveAll(List<A>)
a получаю две заполненные таблицы)) но прикол в том что FK в таблице B null
я знаю почему это получается ,потому что во время комита транзакции у хибера еще нет id класса A ,так как генерация по стратегии секвенс.Если поменять на Idenity все будет норм- но у меня как раз обратная задача.
Поэтому ворпос к знатокам можно ли в процесее сохраннения сущности А каскадно сохранить и все сущности класса В с корректным FK
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40084922
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
Код дай. А не рассказом как ты его писал.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40084924
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
И сиквенс то где?
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40084925
O_79_O , я правильно понимаю, что ты смешиваешь IDENTITY & SEQUENCE в одном проекте? Не думаю что это хорошая идея.

Когда ты вызываешь save(), то по завершению этого метода Hibernate обязан выдать сущности ID. В случае SEQUENCE все норм - мы просто берем следующую цифру, назначаем ее сущности и возвращаем. При этом никаких запросов в БД не уходит.

А в случае IDENTITY порядок другой - ID назначает СУБД, поэтому ORM'у приходится делать сразу же INSERT. Мне кажется эту проблему никак не обойти кроме как сначала сохранять А без B, делать flush(), а затем проставлять коллекцию и снова сохранять.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40084926
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev,
Если смешивает то дурак
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40084931
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stanislav Bashkyrtsev
O_79_O , я правильно понимаю, что ты смешиваешь IDENTITY & SEQUENCE в одном проекте? Не думаю что это хорошая идея.

Когда ты вызываешь save(), то по завершению этого метода Hibernate обязан выдать сущности ID. В случае SEQUENCE все норм - мы просто берем следующую цифру, назначаем ее сущности и возвращаем. При этом никаких запросов в БД не уходит.

А в случае IDENTITY порядок другой - ID назначает СУБД, поэтому ORM'у приходится делать сразу же INSERT. Мне кажется эту проблему никак не обойти кроме как сначала сохранять А без B, делать flush(), а затем проставлять коллекцию и снова сохранять.

Стасян это тесты - в проекте пока все Identity и моя задача как раз все это снести ,заменив на sequence

догадайся почему?
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40084933
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сейчас я смотрел на то как хибер будет сохранять две сущности связанные 1 ко многим,если у базовой секвенс а у списка идентити
в итоге получилось что и ожидалось хибер батчем записал все что секвенс и потом построчно все что идентити

что далее - я меняю сущности В идентификатор на секвенс ,записываю заново и получаю ровно ту же картину - опять построчная запись,хотя в доках напиисано иное
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40084934
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
У тебя удивительная способность задавать глупые детские вопросы.
Зачем смешивать селедку с молоком?
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40084936
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stanislav Bashkyrtsev,
смотри статистику
сейчас я поменял все на секвенс

и таблица А и таблица Б имеют секвенс генератор

в тот же самый момент
при апдейте таблицы B

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  @PutMapping
  public String updateAllTest(){
    var list=bRepository.findAll();
    for (int i = 0; i <list.size() ; i++) {
      list.get(i).setName("bbb"+i);

    }
    bRepository.saveAll(list);
    return "OK";
  }



я получаю вот такую стату

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    23500 nanoseconds spent acquiring 1 JDBC connections;
    0 nanoseconds spent releasing 0 JDBC connections;
    16052000 nanoseconds spent preparing 2501 JDBC statements;
    9248371100 nanoseconds spent executing 2500 JDBC statements;
    10362668600 nanoseconds spent executing 5 JDBC batches;
    0 nanoseconds spent performing 0 L2C puts;
    0 nanoseconds spent performing 0 L2C hits;
    0 nanoseconds spent performing 0 L2C misses;
    10398905100 nanoseconds spent executing 1 flushes (flushing a total of 2500 entities and 0 collections);
    0 nanoseconds spent executing 0 partial-flushes (flushing a total of 0 entities and 0 collections)



где мы видем что вместо 5 батчей( батч сайз настроен на 500) у нас произошло 2500 запросов и потом 5 батчей

и тут возникает вопрос откуда братец 2500 построчных запросов то - ведь уже идентификторы все sequnce
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40084937
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O
где мы видем что вместо 5 батчей( батч сайз настроен на 500) у нас произошло 2500 запросов и потом 5 батчей


Опять что-то пытаешься "оптимизировать"? у тебя статистика вместе и на select и на update, подумай каким образом хибер будет собирать граф, если у тебя:

B -> A -> B[]

и у всех при этом fetch = FetchType.EAGER?
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40084938
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мышь плачет, но продолжает есть кактус...
НО! есть прогресс - выкладывает ddl....
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40084939
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Первый вопрос про сиквенс уже решили)))
Съехал на вопрос - почему много запросов)))
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40084943
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов
O_79_O
где мы видем что вместо 5 батчей( батч сайз настроен на 500) у нас произошло 2500 запросов и потом 5 батчей


Опять что-то пытаешься "оптимизировать"? у тебя статистика вместе и на select и на update, подумай каким образом хибер будет собирать граф, если у тебя:

B -> A -> B[]

и у всех при этом fetch = FetchType.EAGER?

тоесть при апдейте B хибер лезет в А потом опять в В?

выход какой или лейзи инициализация или ?
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40084945
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,

ОРМ для CRUD, оптимизатор))))
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40084950
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов
O_79_O
где мы видем что вместо 5 батчей( батч сайз настроен на 500) у нас произошло 2500 запросов и потом 5 батчей


Опять что-то пытаешься "оптимизировать"? у тебя статистика вместе и на select и на update, подумай каким образом хибер будет собирать граф, если у тебя:

B -> A -> B[]

и у всех при этом fetch = FetchType.EAGER?

сделал LAZY
сделал апдейт таблицы B
статистика ровно таже самая
Код: plsql
1.
2.
3.
4.
5.
  27300 nanoseconds spent acquiring 1 JDBC connections;
    0 nanoseconds spent releasing 0 JDBC connections;
    3439100 nanoseconds spent preparing 101 JDBC statements;
    401003800 nanoseconds spent executing 100 JDBC statements;
    391480100 nanoseconds spent executing 1 JDBC batches;


щас включу логи хибера посмотрю что эта с**а селектит то 100 раз
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40084953
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
O_79_O,
похоже на то ,что при saveAll()
хибер чекает каждый элемент на наличие в базе путем селекта обычного - гениально б ля ,и после этого делает батч апдейт/инсерт
тоесть в любом случае ,какой бы не был идентификатор хибер будет делать тоже количество селектов,что и количество элементов в вашем списке - это какой то лютый пиз дец - неужели нельзя было реализовать это как то по другому ,чем делать хренову тонну селектов то
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40084954
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
при апдейте хибер генерит вот такие запросы
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
    select
        b0_.id as id1_11_0_,
        b0_.a_id as a_id2_11_0_,
        b0_.name as name3_11_0_ 
    from
        b b0_ 
    where
        b0_.id=?



следом за ними идет пачка вот таких

Код: plsql
1.
2.
3.
4.
5.
6.
7.
   update
        b 
    set
        a_id=?,
        name=? 
    where
        id=?



запросов типа селект 11

запросов типа update 5

при этом в таблице находится 10 записей)


что происходит я честно не очень понимаю
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40084959
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O


что происходит я честно не очень понимаю


Да ладно, хибернейт же лучшее изобретение человечества? или уже нет?
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085001
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник,интересно к чему тут твой бесполезный коментарий)


пс.Вообщем выяснил что при генерации id по стратегии sequence хибер будет каждый раз делать селект в этот самый секвенс при вставке строчки
Лечится это инкрементом на 50 хотя бы,тогда время вставки вырастает пропорционально в 50 раз
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085005
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O
забыл ник,интересно к чему тут твой бесполезный коментарий)


пс.Вообщем выяснил что при генерации id по стратегии sequence хибер будет каждый раз делать селект в этот самый секвенс при вставке строчки
Лечится это инкрементом на 50 хотя бы,тогда время вставки вырастает пропорционально в 50 раз


Потому что все должно идти от таблиц. Хибернейт неплох для простых админок CRUD где не сильно много связей между сущностями. Щаг влево-вправо и начинается возня, типичным примером является твой вопрос.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085010
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
O_79_O,
Код дай. А не рассказом как ты его писал.

тебе сюда вход воспрещен. не понятно чтоле из названия?
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085014
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник
O_79_O
забыл ник,интересно к чему тут твой бесполезный коментарий)


пс.Вообщем выяснил что при генерации id по стратегии sequence хибер будет каждый раз делать селект в этот самый секвенс при вставке строчки
Лечится это инкрементом на 50 хотя бы,тогда время вставки вырастает пропорционально в 50 раз


Потому что все должно идти от таблиц. Хибернейт неплох для простых админок CRUD где не сильно много связей между сущностями. Щаг влево-вправо и начинается возня, типичным примером является твой вопрос.


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

со вставкой я разобрался - хибер делает селекты в секвенс и берет оттуда значение - с этим все норм и лечится это увеличением шага инкремента до дефолтных для хибера 50

сейчас у меня второй вопрос

при попытке апдейта некоего количества запиисей в бд происходит не совсем для меня понятный процесс
а имеено хибернейт и так уже имея список перстистеных сущностей зачем то опять идет в базу и достает их оттуда построчно и потом так же построчно апдейтит
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085016
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,

А тебе? Ты же два слова связать не можешь.
Обычно троечники возмущаются отличниками)
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085018
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andreykaT,

А тебе? Ты же два слова связать не можешь.
Обычно троечники возмущаются отличниками)

а мне не сказали. читай заголовки в следующий раз внимательнее.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085019
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
>имея список перстистеных сущностей зачем то опять идет в базу и достает их оттуда построчно и потом так же построчно апдейтит
=
А) проверить версию в бд сучности
Б) хибер не имеет список при коротких транзакциях.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085020
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
PetroNotC Sharp
andreykaT,

А тебе? Ты же два слова связать не можешь.
Обычно троечники возмущаются отличниками)

а мне не сказали. читай заголовки в следующий раз внимательнее.
по топику что есть или ты троечник?
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085021
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
>а мне не сказали
Табаки))
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085022
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,
смотри в чем дело

вот простейшая сучность

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
@Entity
@Getter
@Setter
public class A {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "ID_GENERATOR")
  @SequenceGenerator(name="ID_GENERATOR",sequenceName = "a_id_seq")
  private Long id;

  private String name;



вот ее ддлка
Код: plsql
1.
2.
3.
4.
5.
create sequence a_id_seq increment 50;
create table A(
  id bigint DEFAULT nextval('a_id_seq') primary key ,
  name text
);



что далее при инсерте мы получаем то что и ожидаем

вот код на вставку,тут генерируется 100 сучностей

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 public List<A>getTestListA(){
    List<A> aList = new ArrayList<>();
    for (int i = 0; i < 100; i++) {
      A a = new A();
      a.setName("a" + i);
//      a.setBList(getTestListB());
      aList.add(a);

    }
    return aList;
  }



сгенерированый список записывается методом save() -стандартный метод JPARepository
Код: java
1.
2.
3.
4.
5.
6.
 @PostMapping
  public String saveAllTest(){
    var list=batchTestingService.getTestListA();
    aRepository.saveAll(list);
    return "OK";
  }



два селекта в sequence и 1 булк инсерт

Код: java
1.
2.
3.
3193301 nanoseconds spent preparing 3 JDBC statements;
    390061405 nanoseconds spent executing 2 JDBC statements;
    431665399 nanoseconds spent executing 1 JDBC batches;



тут все хорошо

идем далее берем из базы эти сучности ,сеттим им новое имя - складываем в лист и сохраняем тем же методом save()
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  @PutMapping
  public String updateAllTest(){
    var list=aRepository.findAll();
    for (int i = 0; i <list.size() ; i++) {
      list.get(i).setName("A"+i);

    }
    aRepository.saveAll(list);
    return "OK";
  }



при этом мы получаем вот такую картину

Код: java
1.
2.
3.
3193301 nanoseconds spent preparing 101 JDBC statements;
    390061405 nanoseconds spent executing 100 JDBC statements;
    431665399 nanoseconds spent executing 1 JDBC batches;


где видно что хибер сделал 100 запросов в бд ,я посмотрел что это за запросы
это обычный селект сучности A из таблицы А


вопрос зачем хибер это делает и как этого избежать
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085025
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
O_79_O,

а если между findAll() и saveAll(list), кто то чета изменил?
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085026
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,

22349280
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085028
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,

Убери for и разберись пока без него
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085029
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,

авторкак этого избежать убрать прокладку.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085032
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
am_sasa
O_79_O,

а если между findAll() и saveAll(list), кто то чета изменил?

ну так я и изменил - все верно почему делаются селекты в бд ,если и так есть перситенс сущности
или ты намекаешь на то,что хибер делает dirty check чтоли вот этими селектами ,сравнивая текущее состояние сучности с состоянием в бд?
если это так то как тогда делать булк апдейты?
писать nativeQuery типо update .... set .... where .....?
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085037
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,

хибер для двухзвенной архитектуры , и он подразумевает, что есть и другие хиберы (у других юзеров) которые могли изменить. вот он и перестраховывается
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085039
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя
O_79_O,

авторкак этого избежать
убрать прокладку.
опять ты за свое ,хотел бы я посмотреть на тебя,как ты выпилишь хибер из уже существующего проекта ,кто это согласует и самое главное кто оплатит? ты бизнесу что скажешь? извините мы пару лет назад ошиблись при выборе стека технологий,дайте нам еще годик на перевод системы на новое ядро?)))
Вадя обычно при приеме на работу разработчки среднего звена работают с тем,что есть ,мы лишь можем порекомендовать лиду что то.
Ну он скажет да - было бы здорово и на этом все закончится)
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085043
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя
O_79_O,

хибер для двухзвенной архитектуры , и он подразумевает, что есть и другие хиберы (у других юзеров) которые могли изменить. вот он и перестраховывается

ну теперь все понятно стало,тоесть фактически булк апдейт можно сделать лишь непосредственно прямым запросом,не вытаскивая сущности из базы.
Хорошо хотя бы то,что новые сучности инсертятся булком,ну а апдейт - конечно печалька.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085048
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
>если это так то как тогда делать булк апдейты?
= не дошло?
Crud это не булки, пакеты, импорты, и экспорты.
Все уже на форуме это знают
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085050
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
O_79_O

или ты намекаешь на то,что хибер делает dirty check чтоли вот этими селектами ,сравнивая
намекаю
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085063
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя
O_79_O,

авторкак этого избежать
убрать прокладку.
ну вот смотри - у меня есть некие запииси в таблице,я их оттуда достал - модифицировал и обратно сохранил
причем я не знаю в какие колонки и в каких записях были поменны,как ты это сделаешь без просйлоки?
начнешь писать тонны бойлер кода
а хибер дает тебе вомзможность сделать это в одну строчку saveAll(List list)
при этом он выполнит теже операции что и ты ,а может и меньше за счет кеширования
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085066
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O
вадя
O_79_O,

пропущено...
убрать прокладку.

ну вот смотри - у меня есть некие запииси в таблице,я их оттуда достал - модифицировал и обратно сохранил
причем я не знаю в какие колонки и в каких записях были поменны,как ты это сделаешь без просйлоки?
начнешь писать тонны бойлер кода
а хибер дает тебе вомзможность сделать это в одну строчку saveAll(List list)
при этом он выполнит теже операции что и ты ,а может и меньше за счет кеширования
встретились два максималиста. Один зa орм, второй за jdbc)
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085069
вадяхибер для двухзвенной архитектуры , и он подразумевает, что есть и другие хиберы (у других юзеров) которые могли изменить. вот он и перестраховываетсяПерестраховывается? Другие хиберы? Вадя как обычно комментирует в темах в которых нисколько не разбирается *facepalm*
O_79_Oну теперь все понятно стало,тоесть фактически булк апдейт можно сделать лишь непосредственно прямым запросом,не вытаскивая сущности из базы.Я не уверен что ты правильно используешь термин bulk update. Bulk/batch обновления это про hibernate.order_updates , hibernate.order_inserts .

Никаких select'ов при insert'e новых данных быть не должно. И смотреть для дебага нужно не статистику, а show_sql и use_sql_comments, и желательно логирование на уровне драйвера ( см. тут )
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085073
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O
Pвопрос зачем хибер это делает и как этого избежать


у тебя find и saveAll выполняются в разных транзакциях, т.е. в saveAll ты передаешь сущности, которые персистенс-контексту не известны (он их не загружал), а разработчики spring-data-jpa влепили в save вызывов em.merge() отсюда у тебя лишние селекты.

вообще у тебя должно выглядеть все так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 
  @Transactional
  @PutMapping
  public String updateAllTest(){
    var list=bRepository.findAll();
    for (int i = 0; i <list.size() ; i++) {
      list.get(i).setName("bbb"+i);

    }
    //bRepository.saveAll(list); save не нужен
    return "OK";
  }
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085074
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,

автору меня есть некие запииси в таблице,я их оттуда достал - модифицировал и обратно сохранилтут проблема в том, что ты работаешь с записями, которые извлек. и они у тебя в коде.
с записями, а не с одной записью.

и даже когда у тебя один сервер с хибером - свой набор сучностей у каждого коннекта, по сути двухзвенка.
тут надо логику менять, не держать в памяти кучу данных в листах.
клиент изменил поле надо отправить на сервер и проанализировать кто ещё оперирует с этой записью, чтоб исключить спорную ситуацию с изменением ем данных.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085075
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev,

авторкоторые могли изменить. вот он и перестраховывается
Перестраховывается? Другие хиберы? Вадя как обычно комментирует в темах в которых нисколько не разбирается *facepalm*ты читай правильно - в двухзвенной системе хибер есть у каждого клиента. они ничего не знают о состоянии друг друга
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085095
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
Stanislav Bashkyrtsev,

авторкоторые могли изменить. вот он и перестраховывается
Перестраховывается? Другие хиберы? Вадя как обычно комментирует в темах в которых нисколько не разбирается *facepalm*
ты читай правильно - в двухзвенной системе хибер есть у каждого клиента. они ничего не знают о состоянии друг друга

ну не укаждого хибер есть все таки, а только что сессии разные. ибо сессия к потоку привязана.

@PostMapping а это видимо коттроллеры и если все стандартно спринг бут томкат то каждый запрос отдельный поток и отдельная сессия.

Хиренейт не видит в новой сесии объекты и освежает их запросом к бд.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085103
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,

авторну не укаждого хибер есть все таки, а только что сессии разные. ибо сессия к потоку привязана.
ну это уже тонкости, которые тут роли не играют.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085104
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов
O_79_O
Pвопрос зачем хибер это делает и как этого избежать


у тебя find и saveAll выполняются в разных транзакциях, т.е. в saveAll ты передаешь сущности, которые персистенс-контексту не известны (он их не загружал), а разработчики spring-data-jpa влепили в save вызывов em.merge() отсюда у тебя лишние селекты.

вообще у тебя должно выглядеть все так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 
  @Transactional
  @PutMapping
  public String updateAllTest(){
    var list=bRepository.findAll();
    for (int i = 0; i <list.size() ; i++) {
      list.get(i).setName("bbb"+i);

    }
    //bRepository.saveAll(list); save не нужен
    return "OK";
  }



как обычно чотко и по делу,спасиб за совет

самое смешное я прекрасно помню что хибер отслеживает состоянии персистеной сущности и любое изменение акутализирует,но анотацию ума поставить не хватило)
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085105
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lleming
вадя
Stanislav Bashkyrtsev,

пропущено...
ты читай правильно - в двухзвенной системе хибер есть у каждого клиента. они ничего не знают о состоянии друг друга


ну не укаждого хибер есть все таки, а только что сессии разные. ибо сессия к потоку привязана.

@PostMapping а это видимо коттроллеры и если все стандартно спринг бут томкат то каждый запрос отдельный поток и отдельная сессия.

Хиренейт не видит в новой сесии объекты и освежает их запросом к бд.

так причем тут контроллер вообще?Ты же видешь что работа идет в рамках одного запроса - тоесть по сути не важно контроллер это или обычный тест бы дергал метод этот.
А вот то что findAll и saveAll выполняются в двуз разнызх транзакциях - я забыл,хотя читал про то что у хибера без анотации
@Transactional любой такой запрос это одна транзакция
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085117
O_79_O
lleming
пропущено...


ну не укаждого хибер есть все таки, а только что сессии разные. ибо сессия к потоку привязана.

@PostMapping а это видимо коттроллеры и если все стандартно спринг бут томкат то каждый запрос отдельный поток и отдельная сессия.

Хиренейт не видит в новой сесии объекты и освежает их запросом к бд.

так причем тут контроллер вообще?Ты же видешь что работа идет в рамках одного запроса - тоесть по сути не важно контроллер это или обычный тест бы дергал метод этот.
Вообще важно. Если бы у тебя был Spring Boot, то по умолчанию он сконфигурил бы OpenEntityManagerInViewInterceptor и тогда сессия (EntityManager) создалась бы до контроллера. В таком случае проблемы с лишними select'ами не было бы потому как объекты бы были в сессии уже. Это все равно было бы неправильно (тут явно нужна одна транзакция), но select'ов бы не было. В обычном Spring MVC надо OSIV настраивать самому, причем можно фильтром а не интерсептором (и это лучше чем неявная конфигурация SpringBoot'ом).

А вот в тесте никто бы сессию не открыл без @Transactional. Разве что это RestAssured и/или MockMvc тесты.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085119
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
Ты убедись тестами что в одном методе идут две разных сессии хибера. Для хибера имеет значение сессия его в твоем вопросе.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085120
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stanislav Bashkyrtsev
Вообще важно. Если бы у тебя был Spring Boot, то по умолчанию он сконфигурил бы OpenEntityManagerInViewInterceptor и тогда сессия (EntityManager) создалась бы до контроллера. В таком случае проблемы с лишними select'ами не было бы потому как объекты бы были в сессии уже. Это все равно было бы неправильно (тут явно нужна одна транзакция), но select'ов бы не было. В обычном Spring MVC надо OSIV настраивать самому, причем можно фильтром а не интерсептором (и это лучше чем неявная конфигурация SpringBoot'ом).

А вот в тесте никто бы сессию не открыл без @Transactional. Разве что это RestAssured и/или MockMvc тесты.


ты ошибаешься,потому что у меня как раз таки спринг бут
не путай сессию хибера и http сессию они не взаимосвязаны
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085123
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
O_79_O,
Ты убедись тестами что в одном методе идут две разных сессии хибера. Для хибера имеет значение сессия его в твоем вопросе.

не нужно убеждаться это в учебнике написано
что хибер каждый запрос выполняет в рамках отдельной тразакции( читай хибер сессии)
чтобы хибер выполнил несколько запросов в рамках одной транзакции нужно хиберу об этом соообщить анотацией @Transactional
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085124
O_79_O
Stanislav Bashkyrtsev
Вообще важно. Если бы у тебя был Spring Boot, то по умолчанию он сконфигурил бы OpenEntityManagerInViewInterceptor и тогда сессия (EntityManager) создалась бы до контроллера. В таком случае проблемы с лишними select'ами не было бы потому как объекты бы были в сессии уже. Это все равно было бы неправильно (тут явно нужна одна транзакция), но select'ов бы не было. В обычном Spring MVC надо OSIV настраивать самому, причем можно фильтром а не интерсептором (и это лучше чем неявная конфигурация SpringBoot'ом).

А вот в тесте никто бы сессию не открыл без @Transactional. Разве что это RestAssured и/или MockMvc тесты.


ты ошибаешься,потому что у меня как раз таки спринг бут
не путай сессию хибера и http сессию они не взаимосвязаны
Если бут, тогда не понятно почему OSIV не включен. Он включается по умолчанию.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085126
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O
PetroNotC Sharp
O_79_O,
Ты убедись тестами что в одном методе идут две разных сессии хибера. Для хибера имеет значение сессия его в твоем вопросе.

не нужно убеждаться это в учебнике написано
что хибер каждый запрос выполняет в рамках отдельной тразакции( читай хибер сессии)
чтобы хибер выполнил несколько запросов в рамках одной транзакции нужно хиберу об этом соообщить анотацией @Transactional
в курсе. Я говорил про ОДИН метод.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085127
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stanislav Bashkyrtsev
O_79_O
пропущено...


ты ошибаешься,потому что у меня как раз таки спринг бут
не путай сессию хибера и http сессию они не взаимосвязаны
Если бут, тогда не понятно почему OSIV не включен. Он включается по умолчанию.

потому что он для школьников и тех кто не умеет в хибер ,это сказал один из тим лидов еще давно- у нас зимой тут как раз и были споры на эту тему
он у нас отрублен это да
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085128
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
O_79_O
пропущено...

не нужно убеждаться это в учебнике написано
что хибер каждый запрос выполняет в рамках отдельной тразакции( читай хибер сессии)
чтобы хибер выполнил несколько запросов в рамках одной транзакции нужно хиберу об этом соообщить анотацией @Transactional
в курсе. Я говорил про ОДИН метод.

как ты видешь из кода все в рамках одного метода и происходит
собственно смысл дальще об этом говорить если Олег указал что и где и почему не так.

Давайте я подкину новую историю из этой же темы,она также довольно интересна
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085129
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз.
Поставь рядом findAll и сохранить. И убедись что они в разных сессиях.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085131
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
Не надо новых. Покажи что аннотация уменьшила запросы.
Добивай вопрос до конца.
Не скользи.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085133
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
O_79_O,
Не надо новых. Покажи что аннотация уменьшила запросы.
Добивай вопрос до конца.
Не скользи.

я же выше сказал что анотация уменьшила - точней полностью убрала все лишние селекты
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085135
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
ОК
Отлично
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085159
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
O_79_O,
ОК
Отлично

но есть еще один кейс, я изменил сучность A

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
@Entity
@Getter
@Setter
public class A {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "ID_GENERATOR")
  @SequenceGenerator(name="ID_GENERATOR",sequenceName = "a_id_seq")
  private Long id;

  private String name;

  @OneToMany(mappedBy = B_.A,cascade = CascadeType.ALL)
  List<B> bList;


}



добавил вторую сучность B

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
@Entity
@Getter
@Setter
public class B {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE)
  private Long id;

  private String name;

  private Long aId;

  @ManyToOne
  @JoinColumn(name=B_.A_ID,insertable = false,updatable = false)
  private A a;
}



далее я генерирую сучности A и добвляю к ним в колекцию сучности В

Код: 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.
@Service
public class BatchTestingService {

  private List<B> getTestListB() {
    List<B> bList = new ArrayList<>();
    for (int i = 0; i < 50; i++) {
      B b = new B();
      b.setName("b" + i);
      bList.add(b);

    }
    return bList;
  }

  public List<A>getTestListA(){
    List<A> aList = new ArrayList<>();
    for (int i = 0; i < 50; i++) {
      A a = new A();
      a.setName("a" + i);
      a.setBList(getTestListB());
      aList.add(a);

    }
    return aList;
  }

  }




далее я записываю все это в базу данных

Код: java
1.
2.
3.
4.
5.
6.
7.
 @Transactional
  @PostMapping
  public String saveAllTest(){
    var list=batchTestingService.getTestListA();
    aRepository.saveAll(list);
    return "OK";
  }



что я ожидаю что появится 50 записей в таблице A
и по 2500 записей в таблице B ,при этом в каждой из записей в колонке a_id будет так же заполнена

но этого не происходит- обе таблицы заполняются записям но колонка a_id в таблице B всегда null

я понимаю что это происходит потому что на этапе комита у хибера еше нет id сучности А,так как стратегия генерации ПК у нас секвенс.Это можно исправить поменяв стратегию на Identity - тогда FK будут корректно записываться в таблицу В
но у меня как раз в том и состоит задача - чтобы убрать Identity

вопрос к знатокам - если способ какой исправить ситуацию и каскадно записывать эти две сучности

ддл таблиц


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create sequence a_id_seq increment 50;
create sequence b_id_seq;
create table A(
  id bigint DEFAULT nextval('a_id_seq') primary key ,
  name text
);

create table B(
  id bigint DEFAULT nextval('b_id_seq') primary key,
  name text,
  a_id bigint references a on delete cascade

)
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085164
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
Для каждой сучности свой сиквенс + он в аннотации + все одинаковый режим.
Выполняется?
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085165
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
2) убрать цикл и сделать без него
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085166
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
3)нафиг базу ломать своим increment 50. Убери.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085169
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
O_79_O,
3)нафиг базу ломать своим increment 50. Убери.


чтобы не бегать в бд за каждый ID а так если подсказть хиберу что sequence генерятся интервалом 50 он дернет раз получит 100, а дальше сам внутри приращением 49 новых записей сможет сделать.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085170
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
O_79_O,
3)нафиг базу ломать своим increment 50. Убери.

если убрть инкремент будем делать кучу селектов
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085171
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,
Он сиквенс для приложений предприятия нарисовал.
Я бы не.
Он что, пуп земли со своим хибером?
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085172
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O
PetroNotC Sharp
O_79_O,
3)нафиг базу ломать своим increment 50. Убери.

если убрть инкремент будем делать кучу селектов
другие решения ищи. Убери цикл!
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085173
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
И сиквенс afaik не пишется внутри ddl table
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085176
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
другие решения ищи. Убери цикл!

чем тебе цикл не нравится - там лишь генерятся сущности,он тут вообще никаким боком ни кому не мешает

генерится сущность А - в нее добавляется список с сущностями В
при записи в бд сущности B не получают запись в поле a_id которое является ссылкой на пк из таблицы А
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085177
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Немного изменил сущности
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
@Entity
@Getter
@Setter
public class A {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "ID_GENERATOR")
  @SequenceGenerator(name="ID_GENERATOR",sequenceName = "a_id_seq")
  private Long id;

  private String name;

  @OneToMany(mappedBy = B_.A,fetch = FetchType.LAZY,cascade = CascadeType.ALL)
  List<B> bList;
  
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
@Entity
@Getter
@Setter
public class B {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ID_GENERATOR")
  @SequenceGenerator(name = "ID_GENERATOR", sequenceName = "b_id_seq")
  private Long id;

  private String name;

  @ManyToOne
  @JoinColumn(name = "aId", nullable = false, updatable = false)
  private A a;
  
}



теперь получаю ошибку по понятной причиние ,так как a_id теперь валидируется как NotNull ,а значение ей так и не прописывается при каскадном сохранении
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085178
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O
PetroNotC Sharp
другие решения ищи. Убери цикл!

чем тебе цикл не нравится - там лишь генерятся сущности,он тут вообще никаким боком ни кому не мешает

генерится сущность А - в нее добавляется список с сущностями В
при записи в бд сущности B не получают запись в поле a_id которое является ссылкой на пк из таблицы А
я анализирую. У тебя почти все вопросы про все на свете.
Декомпозиция. Учись.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085183
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы дождемся отношений двух классов. Как пример?)))))
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085184
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Мы дождемся отношений двух классов. Как пример?)))))

выше все есть и ддл и сущности

Петро ,ну не хватает знаний - хоть гугли вместе со мной

вот решение этой проблемы,ddl не меняется - меняем сущности

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
@Entity
@Getter
@Setter
public class A {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ID_GENERATOR")
  @SequenceGenerator(name = "ID_GENERATOR", sequenceName = "a_id_seq")
  private Long id;

  private String name;

  @OneToMany(targetEntity = B.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
  @JoinColumn(name = "a_id", nullable = false)
  List<B> bList;

}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
@Entity
@Getter
@Setter
public class B {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ID_GENERATOR")
  @SequenceGenerator(name = "ID_GENERATOR", sequenceName = "b_id_seq")
  private Long id;

  private String name;
  
}



теперь все пишется корректно и батчится
Код: java
1.
2.
3.
 1824200 nanoseconds spent preparing 54 JDBC statements;
    127689200 nanoseconds spent executing 51 JDBC statements;
    21552140300 nanoseconds spent executing 11 JDBC batches;



не знаю только насколько это хорошо 3 к записей - были записаны за 18 секунд ,нужно понять почему так долго запись идет,если таки булк инсерты
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085185
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
Мне все хватает. У меня красный диплом)
А вот ты путаешь отношеня классов в каскаде и с FK
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085187
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
>вот решение этой проблемы,ddl не меняется - меняем сущности
= то есть как я говорил - циклы не причем к первой ошибке. Не верный маппинг))
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085188
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
>не знаю только насколько это хорошо
= будешь ленится делать тесты что просят мемберы - никогда не узнаешь.
Удачи!
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085196
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,
стой) а где коммент по 18 сек на инсерт? насколько это адекватное время вставки)
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085200
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
самое смешное во всей этой истории,что замена идентификатора с identity на sequence не дает ни какого прироста производительности
и даже наоборот время вставки увеличивается где то секунд на 30
это на вставке 50 к элементов

стата вот такая

идентити id

Код: plsql
1.
2.
3.
4.
 nanoseconds spent preparing 50500 JDBC statements;
     nanoseconds spent executing 50500 JDBC statements;
     nanoseconds spent executing 100 JDBC batches;
время выполения 6 м 50 секунд



sequence id

Код: plsql
1.
2.
3.
4.
 14803500 nanoseconds spent preparing 1013 JDBC statements;
    2552702500 nanoseconds spent executing 1010 JDBC statements;
    433145540000 nanoseconds spent executing 201 JDBC batches;
время выполения 7  м 20 секунд



я не пойму как такое возможно ведь если исходить из статистики тут как миниум во втором варианте вставка должна была пройти быстрей раз в 50
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085204
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O
PetroNotC Sharp,
стой) а где коммент по 18 сек на инсерт? насколько это адекватное время вставки)
проще разобраться в лишних запросах. Свести их к минимуму.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085209
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
O_79_O
PetroNotC Sharp,
стой) а где коммент по 18 сек на инсерт? насколько это адекватное время вставки)
проще разобраться в лишних запросах. Свести их к минимуму.

выше пример с секвенсом там нет ни одного лишего запроса

там всего 2552702500 nanoseconds spent executing 1010 JDBC statements;
а это как раз запрос в секвенс на пачку новых айдишников - так как сущноестей у нас 50 000 то и запросов было 1000
все остальное это 200 батчей ,правда странно почему батчей 200 ,если записей было сделено 50 000 к и размер батча у меня выставлен на 500 - батчей должно быть 101
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085211
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
Уменьшить время в 100 и тысячу раз можно
- убрать ОРМ
- на ОРМ но sql запросы
- выкл FK и ключи, журналирование,... на время вставки
- пакетный режим
- кинуть файл на хост с бд
-...
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085212
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
>выше пример с секвенсом там нет ни одного лишего запроса
= повтори на 50тыр вставкой без хибера. Если то же время то ты достиг потолка.
Далее резервы то что я описал выше.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085213
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
O_79_O,
Уменьшить время в 100 и тысячу раз можно
- убрать ОРМ
- на ОРМ но sql запросы
- выкл FK и ключи, журналирование,... на время вставки
- пакетный режим
- кинуть файл на хост с бд
-...


это все понятно ,я хочу разобоаться имеет ли смысл менять во всем проекте идентификаторы с идентити на sequnce - пока я вижу что время вставки стало хуже.А ведь именно изза этого и возникла такая задача.
Поэтому у меня и остался вопрос - либо я что то не так делаю в рамках поставленной задачи- может есть какие то финты -но сейчас я вижу что смена типа идентификатора не дала ни какого прироста прозводительности ,хотя ведь все было с батчами- как такое возможно я не знаю- очень странная ситуация.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085215
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,

А кто говорил что на сиквенсах будет быстрее?
Ты это не обсуждал.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085216
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У постгри поле счетчик это тот же сиквенс только скрытый системный))
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085238
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O
это все понятно ,я хочу разобоаться имеет ли смысл менять во всем проекте идентификаторы с идентити на sequnce - пока я вижу что время вставки стало хуже.А ведь именно изза этого и возникла такая задача.
Если вы такие умные, то почему вы такие тупые???

Априори очевидно, что при использовании последовательностей вам придётся сделать, как минимум, один запрос для получения списка последовательных значений, разобрать его и вставить каждое полученное значение в формируемый вами запрос.
Вариантов распараллеливания без синхронизации как-то не очень просматривается, поэтому больше работы - больше затраты времени.

Автоинкрементное поле, с другой стороны, выносит все ваши потуги на сторону СУБД. В этой ситуации полезно принимать две презумпции:
1. Другие люди не глупее вас;
2. В силу специализации они сталкивались с гораздо бОльшим количеством разных случаев и у них есть гораздо лучшие возможности для оптимизации разных частных вариантов. Вашего - в том числе.

Например, проблему получения значений автоинкрементных полей при вставках - решает клауза RETURNING, если её поддерживает ваша СУБД и ваш инструментарий.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085242
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
O_79_O,

А кто говорил что на сиквенсах будет быстрее?
Ты это не обсуждал.

блин ну логично же предположить,что булк инсерты в количестве 1000 выполнятся быстрей чем 50 000 инсертов

но сдается мне хибер не умеет делать булк инсерты в прямом смысле этого слова

похоже он просто берет пачку и в рамках одной транзакции ее шлет построчно и потом следом другую- тоесть фактичеки это будет теже самые 50000 инсертов ,да еще и разбитые на куски - поэтому и времени уходит больше

в логах вот такой спам идет


Код: plsql
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.
2021-07-21 23:48:16.095 DEBUG 24600 --- [nio-8080-exec-2] org.hibernate.SQL                        : 
    insert 
    into
        b
        (name, a_id, id) 
    values
        (?, ?, ?)
2021-07-21 23:48:16.095 DEBUG 24600 --- [nio-8080-exec-2] org.hibernate.SQL                        : 
    insert 
    into
        b
        (name, a_id, id) 
    values
        (?, ?, ?)
2021-07-21 23:48:16.096 DEBUG 24600 --- [nio-8080-exec-2] org.hibernate.SQL                        : 
    insert 
    into
        b
        (name, a_id, id) 
    values
        (?, ?, ?)
2021-07-21 23:48:16.097 DEBUG 24600 --- [nio-8080-exec-2] org.hibernate.SQL                        : 
    insert 
    into
        b
        (name, a_id, id) 
    values
        (?, ?, ?)
2021-07-21 23:48:16.097 DEBUG 24600 --- [nio-8080-exec-2] org.hibernate.SQL               



как видно не пахнет никаким булк инсертом ,обычные инсерты вместо чего то такого
Код: plsql
1.
insert into b (id,a_id,name) values (1,2,'sss'),(2,2,'2312');



очень и очень странно ,ведь в настройках все включено для этого и собственно подтверждается статистикой
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085245
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov
O_79_O
это все понятно ,я хочу разобоаться имеет ли смысл менять во всем проекте идентификаторы с идентити на sequnce - пока я вижу что время вставки стало хуже.А ведь именно изза этого и возникла такая задача.
Если вы такие умные, то почему вы такие тупые???

Априори очевидно, что при использовании последовательностей вам придётся сделать, как минимум, один запрос для получения списка последовательных значений, разобрать его и вставить каждое полученное значение в формируемый вами запрос.
Вариантов распараллеливания без синхронизации как-то не очень просматривается, поэтому больше работы - больше затраты времени.

Автоинкрементное поле, с другой стороны, выносит все ваши потуги на сторону СУБД. В этой ситуации полезно принимать две презумпции:
1. Другие люди не глупее вас;
2. В силу специализации они сталкивались с гораздо бОльшим количеством разных случаев и у них есть гораздо лучшие возможности для оптимизации разных частных вариантов. Вашего - в том числе.

Например, проблему получения значений автоинкрементных полей при вставках - решает клауза RETURNING, если её поддерживает ваша СУБД и ваш инструментарий.

тут проблема не в получении id ,а в том,что не исполняется булк инсерт ,вместо него хибер генерирует инсерты по количеству элементов в списке
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085256
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O
тут проблема не в получении id ,а в том,что не исполняется булк инсерт ,вместо него хибер генерирует инсерты по количеству элементов в списке
Вы, опять-таки, исходите из предположения, что серебрянная пуля есть. А это, между прочим, совсем не факт.

Многострочные вставки (bulk insert в вашей терминологии) вещь, конечно, хорошая, но тут надо бы понимать некоторые вещи:
1. Многострочная вставка хороша тогда, когда у вас есть не очень много данных и суммарный размер запроса не превысит предельного размера запроса. В этом случае можно не возиться с параметризованными запросами, но получить выигрыш за счёт разовой подготовки запроса и нескольких вставок из литералов этого запроса.
2. Если же вам требуется много вставок, то параметризация запроса с разовой подготовкой (PrepareStatemnt или около того) с последующими вставками "по одной" может оказаться быстрее, чем меньшая по размеру пачка "литерных" многострочных вставок.
3. Можно, конечно, параметризовать и многострочную вставку, но это определённый геморрой, который, как минимум, потребует обработки последней вставки или/и возни генерацией разных многострочных запросов под разное количество вставок в каждом варианте.

P.S.
У Кайта есть вполне себе показательный пример как время подготовки запроса может в разы превышать время его исполнения.
То, что Кайт пишет про вполне конкретную СУБД - ситуацию никак не меняет. Запрос исполняется не магией, а вполне конкретными этапами: формирование, передача, подготовка и собственно исполнение.
Глупо, согласитесь, "оптимизировать" время исполнения, если остальные этапы занимают значимую долю общего времени.

Такой же глупостью выглядят и ваши наносекунды - типичное "время неопределённости" из-за планирования потоков исполнения и ввода/вывода как вашего приложения так и СУБД будет в пределах долей миллисекунды. А просто читая длинные числа - легко "прокинуться" на порядок, а то и на два.

P.P.S.
И - да: неряшливость в оформлении результатов это плохо. Иногда - очень плохо. Совсем плохо, если это публичные результаты - не работает эгоистичное "а мне так норм".
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085264
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и все же не понятно зачем вставлять такое количество?
неужели нельзя ро одной записи?
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085268
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
insert into b (id,a_id,name) values (1,2,'sss'),(2,2,'2312');
А ты в жизни то булк видел?
)))))))))
Ну вот правда.
Зачем это спринг, бут, хибер, если чел ни разу не видел пакетные записи)))
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085284
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
O_79_O,
insert into b (id,a_id,name) values (1,2,'sss'),(2,2,'2312');
А ты в жизни то булк видел?
)))))))))
Ну вот правда.
Зачем это спринг, бут, хибер, если чел ни разу не видел пакетные записи)))

а ты сам то видел?)то что выше и есть булк инсерт лол
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085285
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя
и все же не понятно зачем вставлять такое количество?
неужели нельзя ро одной записи?

выгрузка в базу из файлов- очень часто используемая функция например
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085287
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O
в логах вот такой спам идет
В интернетах пишут что хибер неправильно логгирует батчи: https://discourse.hibernate.org/t/hibernate-issuing-individual-insert-statements-even-though-batch-insert-is-enabled/2014/2
а если ты по ссылкам пойдешь, то найдешь еще что нужно PostgreSQL крутить
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085290
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
Выспался?
Сделай пакет на jdbc и расскажи как работает.
Или 20 страниц болтать будем?
Я вижу что ты не знаешь что такое батч.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085297
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов
O_79_O
в логах вот такой спам идет
В интернетах пишут что хибер неправильно логгирует батчи: https://discourse.hibernate.org/t/hibernate-issuing-individual-insert-statements-even-though-batch-insert-is-enabled/2014/2
а если ты по ссылкам пойдешь, то найдешь еще что нужно PostgreSQL крутить


я посмотрел логи бд ,а не логи хибера
там идет построчный инсерт
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
2021-07-22 00:05:24.331 MSK [24104] LOG:  duration: 0.018 ms  bind S_3: insert into a (name, id) values ($1, $2)
2021-07-22 00:05:24.331 MSK [24104] DETAIL:  parameters: $1 = 'a168', $2 = '169'
2021-07-22 00:05:24.332 MSK [24104] LOG:  execute S_3: insert into a (name, id) values ($1, $2)
2021-07-22 00:05:24.332 MSK [24104] DETAIL:  parameters: $1 = 'a168', $2 = '169'
2021-07-22 00:05:24.334 MSK [24104] LOG:  duration: 1.836 ms
2021-07-22 00:05:24.335 MSK [24104] LOG:  duration: 0.018 ms  bind S_3: insert into a (name, id) values ($1, $2)
2021-07-22 00:05:24.335 MSK [24104] DETAIL:  parameters: $1 = 'a169', $2 = '170'
2021-07-22 00:05:24.337 MSK [24104] LOG:  execute S_3: insert into a (name, id) values ($1, $2)
2021-07-22 00:05:24.337 MSK [24104] DETAIL:  parameters: $1 = 'a169', $2 = '170'
2021-07-22 00:05:24.338 MSK [24104] LOG:  duration: 2.128 ms
2021-07-22 00:05:24.339 MSK [24104] LOG:  duration: 0.007 ms  bind S_3: insert into a (name, id) values ($1, $2)



но дата прокси сейчас подключу,но тут и по времени выполнения понятно,что нет ни какого булк инсерта
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085300
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
O_79_O,
Выспался?
Сделай пакет на jdbc и расскажи как работает.
Или 20 страниц болтать будем?
Я вижу что ты не знаешь что такое батч.


дядь иди в тему постгрес - ты опять начинаешь в силу своих скудных знаний засирать тему

вот как логируется булк

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
2021-07-22 10:18:28.370 MSK [14824] LOG:  duration: 0.124 ms  parse <unnamed>: insert into b (a_id,name) values (2,'sss'),(2,'2312'),(2,'sds'),(2,'qdqdas'),

	                                 (2,'ssdqwe'),(2,'qweqw'),(2,'qweqwewq'),(2,'qweqw')
2021-07-22 10:18:28.371 MSK [14824] LOG:  duration: 0.136 ms  bind <unnamed>: insert into b (a_id,name) values (2,'sss'),(2,'2312'),(2,'sds'),(2,'qdqdas'),

	                                 (2,'ssdqwe'),(2,'qweqw'),(2,'qweqwewq'),(2,'qweqw')
2021-07-22 10:18:28.372 MSK [14824] LOG:  execute <unnamed>: insert into b (a_id,name) values (2,'sss'),(2,'2312'),(2,'sds'),(2,'qdqdas'),

	                                 (2,'ssdqwe'),(2,'qweqw'),(2,'qweqwewq'),(2,'qweqw')
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085304
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
Правильно. Чтобы тебе красиво уйти с лужи, срочно займись флудом:
- "я знаю булк, это ты не знаешь"
- "не буду делать тесты так как и так все видно"
- "засираешь тему, изыди
))))))))
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085308
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,

авторвыгрузка в базу из файлов- очень часто используемая функция напримертак это решается проще и быстре другими методами, а не через ж....
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085311
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя
O_79_O,

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

еще раз
задание заменить Идентификаторы Identity на Sequence
если бы я был петрой- я бы просто взял это и сделал без задних мыслей,но я не петрушка,которая не видела булк инсерт в глаза и теперь пытается выйти красиво из патовой ситуации- но не получится)
Собственно я для себя решил выяснить получим ли какие либо профиты от смены идентификатора,в числе прочих были озвучены не возможность хибера делать булк инсерты с Idenity id и я решил это проверить от А до Я.Тоесть передо мной вадя не стоит задача сделать выгрузку файла или еще что то ,я хочу понять нужно ли вообще эту таску выполнять- так как я вижу что мы ничего не выграем в итоге -так как время выполенния вставки 50 к элементов 7 минут и в обоих случаях
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085314
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
>так как время выполенния вставки 50 к элементов 7 минут и в обоих случаях
= а с нативным sql?
))))))
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085315
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
Тебе придется выполнить с нативным sql как ты не упирайся и не лови петю)))))
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085318
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
O_79_O,
Тебе придется выполнить с нативным sql как ты не упирайся и не лови петю)))))
однозначно
как минимум что б знать к каким цифрам стремиться.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085326
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Да. И как делается батчинг.
Он и в jdbc начнет аннотацию ставить)))
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085345
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
O_79_O,
>так как время выполенния вставки 50 к элементов 7 минут и в обоих случаях
= а с нативным sql?
))))))

с нативным 12 секунд ,хватит клоунады ,реально засираешь все топики своим бесполезным офтопом
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085346
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,

код?
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085347
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O
PetroNotC Sharp
O_79_O,
>так как время выполенния вставки 50 к элементов 7 минут и в обоих случаях
= а с нативным sql?
))))))

с нативным 12 секунд ,хватит клоунады ,реально засираешь все топики своим бесполезным офтопом

DDL в задаче писать я тебя научил.
А профессионально не растешь
- маппинг искал 4 страницы
- сиквенсы прописывать не умеешь
- названия топиков 16летнего юнца.
"только факты и ничего личного".
Внимание вопрос! 12 сек в пакетном или без?
)))
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085351
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
O_79_O
пропущено...

с нативным 12 секунд ,хватит клоунады ,реально засираешь все топики своим бесполезным офтопом

DDL в задаче писать я тебя научил.
А профессионально не растешь
- маппинг искал 4 страницы
- сиквенсы прописывать не умеешь
- названия топиков 16летнего юнца.
"только факты и ничего личного".
Внимание вопрос! 12 сек в пакетном или без?
)))

внимание читайте название темы и покиньте ее ,ноль пользы - тонны офтопа ,отвечать обоим больше не буду ,все топики превращаете в помойку.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085357
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

будем наблюдать поглощение кактуса.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085359
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
Ваше мнение вечного джуна очень важно для нас.
Работайте!
Когда напишите глупость, мы придем.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085360
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Ему циклы то еще рано.
Он 4 страницы два класса никак не мог связать.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085369
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов
O_79_O
в логах вот такой спам идет
В интернетах пишут что хибер неправильно логгирует батчи: https://discourse.hibernate.org/t/hibernate-issuing-individual-insert-statements-even-though-batch-insert-is-enabled/2014/2
а если ты по ссылкам пойдешь, то найдешь еще что нужно PostgreSQL крутить

не смог прикрутить эту штуку себе ,прописал этот бин ,что дальше вообще непонятно - как хибер должен понимать что ему надо этот бин дернуть - одному богу известно- вообщем да - все пишут что хибер логирует батчи не правильно....
но факт то остается фактом - время выполнения вставки одного и того же количества элементов в базу батчем (якобы) и посроковым инсертом ==одинаков

так как мы точно знаем что хибер не батчит Identity
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085370
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что Вы понимаете под словом "батч" в контексте Hibernate и PostgreSQL ?
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085375
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Что Вы понимаете под словом "батч" в контексте Hibernate и PostgreSQL ?
хороший вопрос)
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085380
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev
Что Вы понимаете под словом "батч" в контексте Hibernate и PostgreSQL ?


Вот это самое из учебника

Код: plsql
1.
2.
"batch":true, "querySize":1, "batchSize":5, "query":["insert into school (name, id) values (?, ?)"], 
  "params":[["School1","1"],["School2","2"],["School3","3"],["School4","4"],["School5","5"]]



а получаем вот это пока

Код: plsql
1.
2.
3.
4.
5.
"querySize":1, "batchSize":0, "query":["insert into school (name, id) values (?, ?)"], 
  "params":[["School1","1"]]
"querySize":1, "batchSize":0, "query":["insert into school (name, id) values (?, ?)"], 
  "params":[["School2","2"]]
"querySize":1, "batchSize":0, "query":["insert into school (name, id) values (?, ?)"],
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085381
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
>из учебника
= на jdbc делать не умеем. Ясно.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085383
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O

Вот это самое из учебника

Код: plsql
1.
2.
"batch":true, "querySize":1, "batchSize":5, "query":["insert into school (name, id) values (?, ?)"], 
  "params":[["School1","1"],["School2","2"],["School3","3"],["School4","4"],["School5","5"]]



Из какого учебника?
Для какой базы это пример?
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085384
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем максимально упростил сучности убрал все связи

вот такие сейчас

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Entity
@Getter
@Setter
public class A {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  private String name;

}



вторая соответсвнно с секвесном

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
@Entity
@Getter
@Setter
public class B {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ID_GENERATOR")
  @SequenceGenerator(name = "ID_GENERATOR", sequenceName = "b_id_seq")
  private Long id;

  private String name;

}



делаю вставку по 10 000 каждой

аналитика по сучности А

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
   65126500 nanoseconds spent preparing 10000 JDBC statements;
    32415667500 nanoseconds spent executing 10000 JDBC statements;
    0 nanoseconds spent executing 0 JDBC batches;
    0 nanoseconds spent performing 0 L2C puts;
    0 nanoseconds spent performing 0 L2C hits;
    0 nanoseconds spent performing 0 L2C misses;
    32999300 nanoseconds spent executing 1 flushes (flushing a total of 10000 entities and 0 collections);
    0 nanoseconds spent executing 0 partial-flushes (flushing a total of 0 entities and 0 collections)



время вставки 33 секунды как мы видим- батчей 0- так как сучность с идентификатором идентити

далее делаем вствку сучностей B

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 16900 nanoseconds spent acquiring 1 JDBC connections;
    0 nanoseconds spent releasing 0 JDBC connections;
    4382400 nanoseconds spent preparing 202 JDBC statements;
    455562600 nanoseconds spent executing 201 JDBC statements;
    34117814800 nanoseconds spent executing 20 JDBC batches;
    0 nanoseconds spent performing 0 L2C puts;
    0 nanoseconds spent performing 0 L2C hits;
    0 nanoseconds spent performing 0 L2C misses;
    34273375200 nanoseconds spent executing 1 flushes (flushing a total of 10000 entities and 0 collections);
    0 nanoseconds spent executing 0 partial-flushes (flushing a total of 0 entities and 0 collections)


видим как и положено 201 запрос в секвенс для получения id
и 20 батчей по 500 элементов в каждом

время ухудушилось на 1 секунду

статистика не будет врать я думаю - значит инсерты все таки исполняются батчами
почему тогда нет разницы по времени построчно или батчем
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085386
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плюс цитата про "батч" из документации PostgreSQL (и ссылка разумеется, из какого места эта цитата)

Я вот тоже, например, хочу создать топик "Объясните, как заставить Hibernate и PostgreSQL готовить по утрам яичницу с беконом пока я сплю, а то на работу приходится голодным уходить" - но ведь не создаю. Может, конечно, стоило бы. Возможно это я просто туплю ((( и не умею Hibernate для выполнения домашней работы использовать. А так хорошо бы было, если бы Hibernate и еду готовил, и пол мыл, и в стиральную машинку грязные носки.... Эх, не жизнь бы была, а красота. IMHO
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085387
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev
O_79_O

Вот это самое из учебника

Код: plsql
1.
2.
"batch":true, "querySize":1, "batchSize":5, "query":["insert into school (name, id) values (?, ?)"], 
  "params":[["School1","1"],["School2","2"],["School3","3"],["School4","4"],["School5","5"]]



Из какого учебника?
Для какой базы это пример?

причем тут база? ваш вопрос звучал как что такое батч в рамках Хибера - я вам ответил,учебник - по хиберу влада махайлича или как там его ,глав спец по хиберу всея планеты
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085390
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev
Плюс цитата про "батч" из документации PostgreSQL (и ссылка разумеется, из какого места эта цитата)

Я вот тоже, например, хочу создать топик "Объясните, как заставить Hibernate и PostgreSQL готовить по утрам яичницу с беконом пока я сплю, а то на работу приходится голодным уходить" - но ведь не создаю. Может, конечно, стоило бы. Возможно это я просто туплю ((( и не умею Hibernate для выполнения домашней работы использовать. А так хорошо бы было, если бы Hibernate и еду готовил, и пол мыл, и в стиральную машинку грязные носки.... Эх, не жизнь бы была, а красота. IMHO

тоесть вы отверагаете саму мысль что хибер умеет делать булк инсерты?))
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085391
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O

тоесть вы отверагаете саму мысль что хибер умеет делать булк инсерты?))


Что Вы понимаете под словами "булк инсерт" в контекте PostgreSQL ?
Ссылку на документацию, please
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085392
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O

причем тут база?

1.
Leonid Kudryavtsev
Что Вы понимаете под словом "батч" в контексте Hibernate и PostgreSQL ?

2.
Leonid Kudryavtsev
Плюс цитата про "батч" из документации PostgreSQL (и ссылка разумеется, из какого места эта цитата)
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085401
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p.s.
Я конечно немного не прав. В PostgreSQL есть "многострочный" INSERT
Я бы и ожидал его увидеть при JDBC'ном "батче". Что под "батчем" понимает JDBC PostgreSQL драйвер - не знаю, не смотрел, не проверял.
p.p.s.
Ожидать от Hibernate максимально возможной производительности (комада PostgreSQL COPY) разумеется не стоит. Через COPY можно сделать на пару порядков (десятки, сотни раз) быстрее. Но это нужно кодировать руками.
p.p.p.s.
Тема учебника не раскрыта. Что за учебник (гугле ничего такого не находит), что же именно писал автор учебника, под какую именно базу данных были примеры (подозреваю или Oracle или MS SQL)
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085404
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
ТС в очередной свой топик наступает на грабли. 8ой раз.
И все ему обязаны сопли его подтирать.
Безмерно ленив.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085405
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O
Вообщем максимально упростил сучности убрал все связи
....
статистика не будет врать я думаю - значит инсерты все таки исполняются батчами
почему тогда нет разницы по времени построчно или батчем


Куча текста, куча ничего не значащих чисел и НЕТ НИ ОДНОЙ строчки кода.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085406
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,

Джун, ждем код на jdbc
)))) LOL
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085408
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
DDL дать обучали 3 года. Все впереди.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085418
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По соседнему топику:

50500 екзекутов ,непонятно откуда взявшиеся 100 батчей и самое главное - время выполнения меньше на 30 секунд

Подскажите кто в курсе что происходит вообще,почему булк инсерты не дали ни какого прироста производительности,а даже ухудишили ее ,хотя как мы видим должно было быть минимум в 50 раз быстрей


1.
а даже ухудишили ее

Подозреваю, bulk insert тут не причем. Ухудшили сиквенсы. Т.к. добавилось еще 50500 запросов к сиквенсам.

2.
почему булк инсерты

А должны были? )))

3.
UPDATE в логе совершенно лишнии. Я бы сначала разобрался, из-за чего у Вас такие команды кривые (явно это кривость Вашего прикладного кода). Не будет UPDATE - будет минимум в 2-а раза быстрее, а нагрузка на базу (и физический диск) вообще станет меньше раза в 3 (три).

AFAIK команда update в PostgreSQL почти эквивалентна delete + insert. Т.ч. insert + update, для postgresql почти то же самое, что и insert+delete+insert
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085428
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

при любом варианте mvcc (multiversion concurrency control) update не бывает сладок.
И оттенков горечи у него столько, сколько вариантов реализации самой версионности, в произведении на в конкретном случае
использованный способ управления транзакциями.
В итоге тьма вариантов и ни одного сладкого.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085430
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby

update не бывает сладок

для PostgreSQL с его мусором в файлах данных (и командой vacum), update наиболее горек.

AFAIK
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085434
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,
Не надо требовать от ОРМ несвойственных ему фич.
То что в jdbc делается одной строкой (коммит вне цикла for) тут такие пляски с бубном.
Это как у меня на паркетнике пенсионном тойоте кнопка Спорт есть))))))
И даже нажимается)))
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085456
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev
По соседнему топику:

50500 екзекутов ,непонятно откуда взявшиеся 100 батчей и самое главное - время выполнения меньше на 30 секунд

Подскажите кто в курсе что происходит вообще,почему булк инсерты не дали ни какого прироста производительности,а даже ухудишили ее ,хотя как мы видим должно было быть минимум в 50 раз быстрей


1.
а даже ухудишили ее

Подозреваю, bulk insert тут не причем. Ухудшили сиквенсы. Т.к. добавилось еще 50500 запросов к сиквенсам.

2.
почему булк инсерты

А должны были? )))

3.
UPDATE в логе совершенно лишнии. Я бы сначала разобрался, из-за чего у Вас такие команды кривые (явно это кривость Вашего прикладного кода). Не будет UPDATE - будет минимум в 2-а раза быстрее, а нагрузка на базу (и физический диск) вообще станет меньше раза в 3 (три).

AFAIK команда update в PostgreSQL почти эквивалентна delete + insert. Т.ч. insert + update, для postgresql почти то же самое, что и insert+delete+insert
кода то нет ,о чем вы леня?
две сучности и метод savaAll()

update который вы видете в логах =хибер делал вставку FK
тоесть механизм там такой - записывает сучности А
потом сучности Б
затем апдейтит сучности Б присваивая им фк

сейчас я убрал и сучностей коллекции чтобы не портить чистоту эксперемента

сиквенсы никак тут ниего не ухудшили,так как инкремент =50,хибер получает сразу пачку айдишников - на 10 000 записпей будет всего 200 селектов в секвенс
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085458
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

не надо мешать все в одну кучу.

Мелодия про update исполняется на армянском дудуке.
Нет музыки печальней и меланхоличней.

А про ОРМ сыграть - тут без турецкой зурны не обойтись, для поддержки парного программирования.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085462
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

)))
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085465
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,
Вот смотри, аффтар третий раз произносит FK и надувает щеки.
Проверь есть тут в топике ddl с FOREIGN KEY
?
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085466
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,

>сейчас я убрал и сучностей коллекции чтобы не портить чистоту эксперемента
= не прошло и двух суток
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085467
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Щас эксперементировал с размером батча,многие пугают что эфективное число должно быть между 10 и 40,сделал 40( было 500)
результат не изменился ни на йоту,теже самые 34-35 секунд на вставку теперь уже 250 батчей ,вместо 20
хер его знает как это вообще возможно

пс.нужно как то посмотреть что хибер отправляет - статистика то показывает батчи,но немного поработав с хибером я понимаю,что это может вообще ничего не значить)
в логах базы просто 10 000 инсертов ,никаким батчем,булком там и не пахнет( может так и должно быть я не знаю)
но ситуация в том,что 10 000 инсертов по времени делается столько же сколько и "Якобы" 20 батчей + 200 селектов в секвенс-ну явно не бывает таких чудес

значит вот эта чудо статистика показывает чепуху

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  18400 nanoseconds spent acquiring 1 JDBC connections;
    0 nanoseconds spent releasing 0 JDBC connections;
    2459800 nanoseconds spent preparing 202 JDBC statements;
    487211500 nanoseconds spent executing 201 JDBC statements;
    34270289300 nanoseconds spent executing 200 JDBC batches;
    0 nanoseconds spent performing 0 L2C puts;
    0 nanoseconds spent performing 0 L2C hits;
    0 nanoseconds spent performing 0 L2C misses;
    34383711600 nanoseconds spent executing 1 flushes (flushing a total of 10000 entities and 0 collections);
    0 nanoseconds spent executing 0 partial-flushes (flushing a total of 0 entities and 0 collections)
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085469
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
booby,
Вот смотри, аффтар третий раз произносит FK и надувает щеки.
Проверь есть тут в топике ddl с FOREIGN KEY
?


давай ты не будешь уже до конца то позориться дядь

22349117
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085470
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O
PetroNotC Sharp
booby,
Вот смотри, аффтар третий раз произносит FK и надувает щеки.
Проверь есть тут в топике ddl с FOREIGN KEY
?


давай ты не будешь уже до конца то позориться дядь

22349117
где?)))) LOL
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085471
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,

Ты как слепой котенок с гонором
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085474
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Завис?
Скажу еще тебе открытие - FK не применяют с каскадом.
Поэтому и говорил тебе ВЧЕРА - убери циклы. Сделай два класса.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085477
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
O_79_O,

Ты как слепой котенок с гонором


я не пойму зачем я вообще тебе отвечаю

это что по твоему дурик)
Код: plsql
1.
 a_id bigint references a on delete cascade


а на счет каскадного удаления вообще лучше не позорься)
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085478
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Завис?
Скажу еще тебе открытие - FK не применяют с каскадом.
Поэтому и говорил тебе ВЧЕРА - убери циклы. Сделай два класса.

какие циклы,какие два класса что ты несешь то боже мой)
там и так два класса А и Б лол
меж ними связь 1 ко многим ,но чтоб ты не нервничал так сильно,видимо у тебя обострение)) я и ее убрал)
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085480
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O

в логах базы просто 10 000 инсертов ,никаким батчем,булком там и не пахнет( может так и должно быть я не знаю)

1)
Блин. НУ НЕТ В PostgreSQL таких терминов "батч", "булк". Вообще НЕТ

Максимально, что есть, это "insert multiple rows in a single command" в некоторых версиях документации "multirow insert".

Что бы включить эту фичу в PostgreSQL JDBC драйвере, в строке соединения нужно прописать свойство reWriteBatchedInserts=true

2)
В связи с п.1, совершенно не понятно, чего же Вы пытаетесь добиться и в чем у Вас проблема.

значит вот эта чудо статистика показывает чепуху

Это статискика Hibernate. Где тут чепуха, не понятно.

update который вы видете в логах =хибер делал вставку FK
тоесть механизм там такой

Разбираться почему рабоает именно так. Не верю, что в Hibernate все настолько плохо. Просто не верю. Да и google не так однозначен. Он уверяет, что лишние update только в случае "unidirectional one-to-many".

"Bidirectional one-to-many and both many-to-one association mappings are fine. But you should avoid unidirectional one-to-many associations in your domain model. "

Хотя в приведенном Вами кусках кода на первой странице, вроде many-to-one присутствует. В общем - разбираться. IMHO
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085482
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
Я вижу ты нервничаешь.
Где. ddl с FK?
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085484
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Вооот. Направления связи.
Он от тупости не понимает связей в бд.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085488
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

Маппинг неверный. В пару классов воткнул каскад+fk+manytoone
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085490
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
Завтра ждем по новой маппинг, код, ddl, логи.
Котенок ты наш.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085491
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
update который вы видете в логах =хибер делал вставку FK
тоесть механизм там такой


https://vladmihalcea.com/the-best-way-to-map-a-onetomany-association-with-jpa-and-hibernate/
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085492
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev

Разбираться почему рабоает именно так. Не верю, что в Hibernate все настолько плохо. Просто не верю. Да и google не так однозначен. Он уверяет, что лишние update только в случае "unidirectional one-to-many".

"Bidirectional one-to-many and both many-to-one association mappings are fine. But you should avoid unidirectional one-to-many associations in your domain model. "

Хотя в приведенном Вами кусках кода на первой странице, вроде many-to-one присутствует. В общем - разбираться. IMHO


еще раз для тех кто в танке посмотрите в логах бд ,какая именно колонка апдейтится и вы прозреете,почему это происходит- изза стратегии генерации идентификатора- если интересно почитайте ,много нового я думаю откроете.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085494
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev
update который вы видете в логах =хибер делал вставку FK
тоесть механизм там такой


https://vladmihalcea.com/the-best-way-to-map-a-onetomany-association-with-jpa-and-hibernate/
разберитесь в механизме генерации идентификаторов,потом поговорим с вами,вы можете взять вот этот пример из вашей ссылки поменять идентификатор на секвенс и получите null в колонке FK ,почему так происходит можете почитать в у того же влада
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085501
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
Бегом за ddl умник, а потом будешь на профи наезжать.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085502
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Leonid Kudryavtsev,

Маппинг неверный. В пару классов воткнул каскад+fk+manytoone

каскад хиберовский и каскад что ты видешь в ддл две разные вещи,умора )))
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085503
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O,
И прекрати стращать своим длинным null в колонке. Достал.
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085505
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O
PetroNotC Sharp
Leonid Kudryavtsev,

Маппинг неверный. В пару классов воткнул каскад+fk+manytoone

каскад хиберовский и каскад что ты видешь в ддл две разные вещи,умора )))
словарный понос пошел.... Еще 5 сраниц
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085513
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev
O_79_O

в логах базы просто 10 000 инсертов ,никаким батчем,булком там и не пахнет( может так и должно быть я не знаю)

1)
Блин. НУ НЕТ В PostgreSQL таких терминов "батч", "булк". Вообще НЕТ

Максимально, что есть, это "insert multiple rows in a single command" в некоторых версиях документации "multirow insert".

Что бы включить эту фичу в PostgreSQL JDBC драйвере, в строке соединения нужно прописать свойство reWriteBatchedInserts=true

2)
В связи с п.1, совершенно не понятно, чего же Вы пытаетесь добиться и в чем у Вас проблема.


вот этого и пытался добиться,скорость вставки стала на уровне консольной команды)

А то если клоуна петруху слушать- то хибер у него "НЕ ДЛЯ ЭТАГА" ахахаах

значит есть обоснованность замены идентификатора с Идентити на Секвенс
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085516
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_79_O
Leonid Kudryavtsev
пропущено...

1)
Блин. НУ НЕТ В PostgreSQL таких терминов "батч", "булк". Вообще НЕТ

Максимально, что есть, это "insert multiple rows in a single command" в некоторых версиях документации "multirow insert".

Что бы включить эту фичу в PostgreSQL JDBC драйвере, в строке соединения нужно прописать свойство reWriteBatchedInserts=true

2)
В связи с п.1, совершенно не понятно, чего же Вы пытаетесь добиться и в чем у Вас проблема.


вот этого и пытался добиться,скорость вставки стала на уровне консольной команды)

А то если клоуна петруху слушать- то хибер у него "НЕ ДЛЯ ЭТАГА" ахахаах

значит есть обоснованность замены идентификатора с Идентити на Секвенс
переведи какой вывод ты сделал.
Все? Сливаешься?
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085517
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверно увидел что FK в базе нет на самом деле))))))
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085524
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помнишь тему "куда утекает память?"
Тоже матерился как вовочка в школе.
Щеки ужас надувал.
А на деле оказалось пшик тема.
Тут тоже. Тема - "как стас ddl показвать стеснялся".
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085535
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085548
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev

1)
Блин. НУ НЕТ В PostgreSQL таких терминов "батч", "булк". Вообще НЕТ

Максимально, что есть, это "insert multiple rows in a single command" в некоторых версиях документации "multirow insert".

Что бы включить эту фичу в PostgreSQL JDBC драйвере, в строке соединения нужно прописать свойство reWriteBatchedInserts=true



нет ли чего то подобного на апдейт ?чтобы не построчно обновлялись записи ,а вот на подобии этой
или же чудо механизм постгреса ,который печется о конкуретности не даст нам такого сделать даже в рамках одной тразакции?
...
Рейтинг: 0 / 0
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
    #40085616
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слушайте, Иван Иванович, песню "Кирпичики" и не выёживайтесь (ц) бородатый анекдот.

Для "проблемы", которую вы "решаете" существуют параметризованные запросы и управление транзакцией, которое позволяет выбрать "размер" фиксируемой (откатываемой) пачки записей.
...
Рейтинг: 0 / 0
164 сообщений из 164, показаны все 7 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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