powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сохранение сущностей со списком в JPA
1 сообщений из 1, страница 1 из 1
Сохранение сущностей со списком в JPA
    #38117082
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
@Entity
public class Person
{
    @OneToMany(mappedBy = "person",fetch = FetchType.LAZY,cascade = CascadeType.ALL)
    private List<Address> addresses = new ArrayList<Address>();
}

@Entity
public class Address
{
    @ManyToOne(fetch = FetchType.EAGER,cascade = {CascadeType.PERSIST,CascadeType.MERGE},optional = true)
    @JoinColumn(name = "PERSON_ID",nullable = true)
    private Person person;
}




На странице есть возможность выбрать список имеющихся в базе адресов, затем создать Person, присвоить ему список адресов и затем сохранить этиот новый Person со списком адрресов, которые не новые, а считанные из базы в предыдущей транзакции.
То есть List<Address> addresses уже есть в бд, но они считываются в отдельной транзакции.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
@Service("addressService")
@Repository
@Transactional
class AddressService
{
     @Autowired
    AddressRepository addressRepository;
    
   @Transactional(readOnly = true)
    public List<Address> findAllAddresses
    {
      return addressRepository.findAll();
    }
}



Затем создается Person, в другом классе и в другой транзакции
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 @Service("personService")
 @Repository
 @Transactional
  class PersonService
  {
     @Autowired
     PersonRepository personRepository;

     public Person save(String name, List<Address> addresses)
     {
           Person person = new Person();
           person.setName(name);
           person.setAddresses(addresses);
           personRepository.save(person) 
     }

   } 




И вот когда я хочу сохранить person, выпадает exception - detached entity passed to persist occurs

Для того, чтобы этого избежать, приходится после создания Person делать
Код: java
1.
personServise.save(person) 



то есть сохранить его в одной транзакции, затем добавить adreses в persion
Код: java
1.
 person.setAddresses(addresses)



затем снова вызвать
Код: java
1.
personServise.save(person) 




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


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