Для добавления записей в две таблицы одновременно и связывания их друг с другом с помощью Hibernate, можно использовать следующий подход:
1. Определите классы сущностей для каждой таблицы. Например, классы User и UserInfo.
```java
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
@OneToOne(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private UserInfo userInfo;
// Геттеры, сеттеры и другие поля и методы
}
@Entity
@Table(name = "user_info")
public class UserInfo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String firstName;
private String lastName;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
// Геттеры, сеттеры и другие поля и методы
}
```
2. Определите метод для добавления пользователей и информации о них. В методе создайте объекты User и UserInfo, установите их свойства и свяжите их друг с другом.
```java
@Transactional
public void addUserAndInfo(String username, String firstName, String lastName) {
User user = new User();
user.setUsername(username);
UserInfo userInfo = new UserInfo();
userInfo.setFirstName(firstName);
userInfo.setLastName(lastName);
userInfo.setUser(user);
user.setUserInfo(userInfo);
entityManager.persist(user);
}
```
3. При вызове метода addUserAndInfo передайте значения для имени пользователя и его информации.
```java
userService.addUserAndInfo("username", "firstName", "lastName");
```
При выполнении кода Hibernate автоматически сохранит объекты User и UserInfo в соответствующие таблицы и установит связь между ними.
Обратите внимание на использование аннотаций @OneToOne, @JoinColumn, а также параметров mappedBy и cascade в классах сущностей. Они определяют связь между таблицами, используя внешний ключ и обеспечивают автоматическое сохранение связанных объектов при сохранении основного объекта. Каскадное удаление также может быть настроено, если требуется удалить связанные записи при удалении основной записи.