Size: a a a

2020 August 07

RG

Rinchin G in learn.java
ага, пасиба, но здесь они сперва наполняют объект а затем сохраняют
Post post = new Post("First post");

post.addComment(
   new PostComment("My first review")
);
post.addComment(
   new PostComment("My second review")
);
post.addComment(
   new PostComment("My third review")
);

entityManager.persist(post);

а я вот хочу в разных потоках сразу вести запись вычисленных подэлементов в БД.
Или лучше сохранять в коллекцию дождаться завершения выполнения всех потоков и затем полученный заполненный до конца элемент один раз сохранить?
источник

D

Dima in learn.java
Rinchin G
ага, пасиба, но здесь они сперва наполняют объект а затем сохраняют
Post post = new Post("First post");

post.addComment(
   new PostComment("My first review")
);
post.addComment(
   new PostComment("My second review")
);
post.addComment(
   new PostComment("My third review")
);

entityManager.persist(post);

а я вот хочу в разных потоках сразу вести запись вычисленных подэлементов в БД.
Или лучше сохранять в коллекцию дождаться завершения выполнения всех потоков и затем полученный заполненный до конца элемент один раз сохранить?
потоки тут вообще не причем
источник

D

Dima in learn.java
у тебя энтитименеджер привязан к потоку
источник

RG

Rinchin G in learn.java
согласен про потоки
источник

D

Dima in learn.java
честно говоря не понимаю, какой вопрос ты хочешь задать вообще
источник

D

Dima in learn.java
это проблема тут частая, когда люди свои мысли выразить не могут
источник

D

Dima in learn.java
сохранение подэлементов у тебя всегда доступно с помощью двух путей - Cascade.ALL ( или его варианты) и добавление элементов в коллекцию + сохранение root сущности
источник

D

Dima in learn.java
или добавление child элементов через child репозиторий + простановка root сущности/foreign key на child сущности
источник

RG

Rinchin G in learn.java
т.е. если я хочу сохранять детей по отдельности для данного родителя
мне нужно было бы
PostComment postComment1 = new PostComment();
postComment1.setPost(post)
postCommentRepository.save(postComment1)
источник

D

Dima in learn.java
Rinchin G
т.е. если я хочу сохранять детей по отдельности для данного родителя
мне нужно было бы
PostComment postComment1 = new PostComment();
postComment1.setPost(post)
postCommentRepository.save(postComment1)
например так
источник

D

Dima in learn.java
при этом post (root энтити) ты предварительно выше по коду получаешь по идентификатору
источник

D

Dima in learn.java
чтобы у тебя сущность была managed и связана с текущим entityManager
источник

D

Dima in learn.java
этот вариант многословней и надежней
источник

D

Dima in learn.java
вариант с Cascade.ALL обычно используют для чайлд сущностей, который без детей не могут существовать
источник

RG

Rinchin G in learn.java
т.е. если меня нет родителя и нет детей
то

Post post = new Post();
postRepository.save(post);

ExecutorService executor = Executors.newFixedThreadPool(THREAD_COUNT);
for (i = 1; i<20;i++){
executor.submit(
() -> {
   PostComment postComment1 = new PostComment();
   postComment1.setPost(post)
   postCommentRepository.save(postComment1)
 }
}

(каскады в отношениях можно не указывать?)
источник

D

Dima in learn.java
Rinchin G
т.е. если меня нет родителя и нет детей
то

Post post = new Post();
postRepository.save(post);

ExecutorService executor = Executors.newFixedThreadPool(THREAD_COUNT);
for (i = 1; i<20;i++){
executor.submit(
() -> {
   PostComment postComment1 = new PostComment();
   postComment1.setPost(post)
   postCommentRepository.save(postComment1)
 }
}

(каскады в отношениях можно не указывать?)
каскады можно не указывать
источник

D

Dima in learn.java
в твой код выше в блок runnable надо добавить вытягивание post по айди
источник

D

Dima in learn.java
так как экземпляр entity manager привязан каждый к своему треду
источник

D

Dima in learn.java
и я что-то сомневаюсь, что код выше взлетит
источник

D

Dima in learn.java
postRepository.save(post); - < это выполняется в main thread и имеет свой em внутри спринг дата репозиториев
источник