Hibernate: отображение двух объектов - PullRequest
0 голосов
/ 28 ноября 2018

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

Мыесть две таблицы User и UserInfo.UserInfo имеет user_id в качестве внешнего ключа.

1) Общее сопоставление, о котором я узнал в hibernate.

В сущностях User и UserInfo у меня обычно отображаются такие сопоставления:

class User{
   private int userId;
   private String userName;

   // getter and setters

}

class UserInfo{

   private int userInfoId;
   private String firstName;
   private String lastName;

   @OneToOne()
   @JoinColumn(name="user_id")
   private User user;

}

2) Вот как мой коллега делает картографию:

class User{
   private int userId;
   private String userName;

   @OneToOne(mappedBy="user")
   @JoinColumn(name="user_id")
   private UserInfo userInfo;

   // getter and setters

}

class UserInfo{

   private int userInfoId;
   private String firstName;
   private String lastName;

   @OneToOne()
   private User user;

}

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

Спасибо.

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018

Разница в том, что ваш коллега двунаправленный, а ваш однонаправленный.Двунаправленная ассоциация обеспечивает навигацию в обоих направлениях.Если вам нужен объект userInfo при запросе пользователя, вам нужен двунаправленный объект.Если это не так, то тот, который у вас есть, более эффективен, чем у вашего коллеги.

Я бы порекомендовал вам прочитать эту полезную ссылку о том, как эффективно выполнять сопоставление один к одному: https://vladmihalcea.com/the-best-way-to-map-a-onetoone-relationship-with-jpa-and-hibernate/

0 голосов
/ 28 ноября 2018

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

В случае, если вы получите JsonMappingException , тогда вы можете простообрабатывать с помощью приведенной ниже аннотации

Вы можете использовать @ JsonIgnore

0 голосов
/ 28 ноября 2018

они оба должны создавать одинаковые таблицы в БД, но второе решение лучше, когда вам нужно вызвать пользователя из userInfo или userInfo из пользователя.

ex:

User user = ...
user.getUserInfo().getFirstName();

UserInfo info = ...
info.getUser().getUserName();

PS:В этой статье говорится, что наиболее эффективно использовать @OneToOne с @MapsId https://vladmihalcea.com/the-best-way-to-map-a-onetoone-relationship-with-jpa-and-hibernate/

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