我有两个表,分别是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;
}
没有show getters和setter。
我使用spring boot来创建我的应用程序。当我去保存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);
}
}
答案 0 :(得分:1)
您需要在实体类中进行愚蠢的更改
在User
中,类添加了一个字段,其中包含由UserDetails
@OneToMany(mappedBy="user")
private Collection<UserDetails> userDetails;
在UserDetails
课程中,添加一个带有字段user
的额外注释。像:
@ManyToOne
@JoinColumn(name="id")
private User user;
要在不成功的交易中回滚,您可以在服务层(您调用@Transactional
或.save()
方法的地方)中添加.persists()
注释。