У меня есть две таблицы: User и UserDetails.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String userName;
private String password;
}
@Entity
public class UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String firstName;
private String lastName;
private String address;
private Date birthday;
@ManyToOne
private User user;
}
Нет геттеров и сеттеров шоу.
Я использую весеннюю загрузку для создания своего приложения. когда я иду на сохранение User
, я хочу сохранить эти две таблицы одновременно. Это означает, что сначала сохраняю таблицу User
, а затем я сохраняю таблицу UserDetails
(для сохранения таблицы UserDetails
требуется первичный ключ таблицы User
). как я делаю это, используя репозиторий Spring boot JPA? Другое дело, если таблица UserDetails
не сохраняется, мы хотим откатить всю нашу транзакцию (это означает, что мы должны откатить пользовательскую таблицу).
Это мой класс услуг
@Service
@Transactional
public class UserDetailsService {
@Autowired
private UserDetailsRepository userDetailsRepository;
@Autowired
private UserRepository userRepository;
void saveUserDetails(String userName, String password, String firstName, String lastName,
String address, Date birthday) {
User n = new User();
n.setUserName(userName);
n.setPassword(password);
UserDetails ud = new UserDetails();
ud.setFirstName(firstName);
ud.setlastName(lastName);
ud.setAddress(address);
ud.setBirthDate(birthday);
userRepository.save(n);
userDetailsRepository.save(ud);
}
}
1 ответ
Вам нужно сделать глупое изменение в своих классах сущностей
В
User
класс добавил поле с соответствующим геттером и сеттером, которое отображаетсяUserDetails
@OneToMany(mappedBy="user") private Collection<UserDetails> userDetails;
В классе
UserDetails
добавьте дополнительные аннотации с полемuser
. нравиться:@ManyToOne @JoinColumn(name="id") private User user;
Для отката при неудачной транзакции вы можете добавить аннотацию @Transactional
в свой уровень сервиса (где вы вызвали метод .save()
или .persists()
).
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].
userDetails
, я хочу получить идентификатор таблицыuser
. но как я получаю идентификатор пользователя. там две таблицы хотят сохранить одну и ту же транзакцию.