Стойкость Hibenate Collection - PullRequest
0 голосов
/ 28 мая 2020

Привет всем, я новичок в Hibernate, просматривая документацию по спящему режиму, я наткнулся на это утверждение, в котором говорится, что «Два объекта не могут совместно использовать ссылку на один и тот же экземпляр коллекции», но когда я использую приведенный ниже код, ошибка не возникает все в порядке, и в спящем режиме сохраняются как сущности, так и соответствующие ссылки на коллекции в БД без каких-либо проблем, я что-то упустил, можно ли объяснить этот оператор и в каком сценарии он применим.

Entity1:

public class Person {

@Id
@GeneratedValue
private Long id;

@CreationTimestamp
private LocalDateTime date;

@ElementCollection
private List<String> phones = new ArrayList<>();

@ElementCollection
private Set<LocalDateTime> personOrderDates;
}

Entity2:

public class Home {

@Id
@GeneratedValue
private long id;


@ElementCollection
private List<String> homePhoneList;
}

Сохранение кода гибернации:

    Person person1 = entityManager.find(Person.class, 48l);
    Person person2 = entityManager.find(Person.class, 49l);

    List<String> newPhoneList=new ArrayList();
    newPhoneList.add("x");
    newPhoneList.add("y");
    newPhoneList.add("z");

    person1.setPhones(newPhoneList);
    person2.setPhones(newPhoneList);

    Home home1=Home.builder().homePhoneList(newPhoneList).build();

    entityManager.persist(home1);
    entityManager.persist(person1);
    entityManager.persist(person2);

здесь явно мы можем использовать одну и ту же ссылку на коллекцию между двумя экземплярами одного и того же объекта (Person), а также с совершенно разными Тип объекта (Дом), а также без каких-либо проблем. все три объекта сохраняются / обновляются в БД. что мне не хватает.

1 Ответ

0 голосов
/ 28 мая 2020

Две сущности не могут совместно использовать ссылку на один и тот же экземпляр коллекции

Это все еще верно. это означает, что если вы загрузите одну из этих сущностей и измените коллекцию телефонов, коллекция телефонов другой сущности останется неизменной.

Вы просто делитесь ссылкой в ​​своем java, а не в базе данных. В следующий раз эта общая ссылка исчезнет, ​​и все ваши объекты будут состоять из отдельных ссылок на свои собственные списки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...