JPA / переводит в спящий режим однонаправленный OneToMany как ‘mappedBy’

#java #hibernate #jpa

#java #перевести в спящий режим #jpa

Вопрос:

Недавно я нашел такое отображение в нашем репозитории:

 @Entity
...
public class Foo{
     ...
     @OneToMany(mappedBy = "someField", cascade = CascadeType.ALL, orphanRemoval = true)
     public Set<Bar> bars;
     ...
}

@Entity
@IdClass(Bar.Key.class)
...
public class Bar{
     @Id
     public long someField;
     @Id
     public long anotherField;
     ...
     static class Key implements Serializable {
        public long someField;
        public long anotherField;
     }
}
  

В обеих таблицах нет внешних ключей.
Я был удивлен, что в @ManyToOne классе нет Bar поля и @OneToMany оно аннотируется без @JoinColumn as mappedBy . В любом случае это работает отлично: без избыточных обновлений — как будто это двунаправленное отображение. Я не эксперт в JPA / Hibernate, и я никогда не видел такого сопоставления в руководствах / документации. Я попытался погуглить такое отображение, но не нашел никакого объяснения. Можно ли сопоставлять подобные объекты?
Спасибо!

Ответ №1:

Двунаправленные сопоставления «один ко многим» и «многие к одному» в порядке. Но вам следует избегать однонаправленных связей «один ко многим» в вашей модели предметной области. В противном случае Hibernate может создать неожиданные таблицы и выполнить больше инструкций SQL, чем вы ожидали.

Определение однонаправленной ассоциации «один ко многим», похоже, не является проблемой. Вам просто нужен атрибут, который отображает ассоциацию и отношение @OneToMany.

Ссылка см. ссылку

Комментарии:

1. @MS90 Вопрос в том, «Нормально ли отображать объекты, подобные этому?» Ответ таков: «вам следует избегать, потому что он выполняет больше инструкций SQL, чем вы ожидали».

2. Можете ли вы уточнить, какие дополнительные инструкции SQL (кроме необходимой) выполняются? @Khalid Shah

3. @MS90 я также предоставляю ссылку для этого. вы можете прочитать пример оттуда 🙂

4. Взгляните на раздел «Использование orphanRemoval при моделировании родительско-дочерних ассоциаций» этой статьи. @Khalid Shah. Я дал 1 за хорошую ссылку.