Как сделать запись в две таблицы

Как сделать две записи в таблице с помощью JPA и Hibernate. Итак, у меня есть связь между двумя таблицами человека и пользователя. Пользователь таблицы имеет столбец person_id. Итак, сначала нам нужно сделать запись для человека, получить идентификатор, записать в таблицу пользователей и сделать фиксацию.

@Entity
@Table(name = "person")
public class Person {
  @Column(name = "id")
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
  @Column(name = "old_id", nullable = false)
  private String oldId

}


@Entity
@Table(name = "user")
public class User {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Column(name = "id")
  private long id;

  @Column(name = "username")
  private String username;

  @Column(name = "password")
  private String password;

  @Column(name = "person_id")
  private long personId;

  public User(String username, String password) {
    this.username = username;
    this.password = password;
  }
personRepository.save(new Person("9999-1","Denis Beloff","Denis",
                "Beloff", LocalDate.now(),LocalDate.now(),"M",33,
                174.0,83.1,"Some Street",LocalDate.now(),"[email protected]",
                "890327388", new User("[email protected]", "passw")));





Где метод DAO, который вы должны использовать для сохранения?

Shaik Bajivali 27.06.2019 12:39

это предоставлено CrudRepository

user3693537 27.06.2019 12:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
25
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы хотите сохранить код как есть, вам нужно сначала сохранить человека, а затем получить идентификатор и установить его в поле Users personId.

В противном случае вам нужно определить отношение один к одному от человека к пользователю с каскадированием при сохранении:

@OneToOne(cascade = CascadeType.PERSIST)
private Person person.

И тогда вы можете установить человека в классе User, и все будет вставлено Hibernate.

Нет, я не хочу оставлять код как есть. Я пытаюсь найти правильный путь. Так что, если у вас есть примеры или ссылки, было бы здорово.

user3693537 27.06.2019 12:51

Итак, мое предложенное решение с сопоставлением OneToOne — это то, что вы ищете. Для получения дополнительной информации вы должны прочитать Руководство по Hibernate docs.jboss.org/hibernate/orm/5.4/userguide/html_single/…

Simon Martinelli 27.06.2019 15:07

Другие вопросы по теме