所以基本上我有两张具有一对一关系的表。
Table 1: Users
id
username
Table 2: Wallet
id
totalamount
user_id
但我不知道如何在创建用户时自动添加钱包。 现在我只知道spring mvc,所以我在DAO中写插入方法吗?
如果你不使用JPA,那么是的,你必须自己处理数据库交互。您可以创建 DAO 或专用服务来编写插入方法。
如果您使用 Hibernate 作为 JPA 并为每个表创建
@Entity
类,则只需在映射中提及 CascadeType
即可实现这一点。
@OneToOne(cascade = CascadeType.ALL)
然后只需保存 1 个类,另一个类就会自动插入到数据库中。您可以根据您的要求选择不同的CascadeType。
您还可以查看其他一些问题 -
如何在spring boot上不使用jpa从oracle获取数据
用简单语言来说hibernate是什么?
Hibernate:级联类型
使用Hibernate,您可以利用级联来简化保存相关实体的过程。在这种情况下,您可以使用级联在保存新用户时自动保留钱包。这是例子:
@Entity
public class User {
private String username;
@OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
private Wallet wallet;
// getters and setters
}
@Entity
public class Wallet {
private BigDecimal totalAmount;
@OneToOne
@JoinColumn(name = "user_id")
private User user;
// getters and setters
}
public interface UserRepository extends JpaRepository<User, Long> {
// additional methods if needed
}
public interface WalletRepository extends JpaRepository<Wallet, Long> {
// additional methods if needed
}
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Autowired
private WalletRepository walletRepository;
@Transactional
public User createUserWithWallet(User user) {
// Save the user to generate the user ID
User savedUser = userRepository.save(user);
// Create a wallet for the user
Wallet wallet = new Wallet();
wallet.setUser(savedUser);
walletRepository.save(wallet);
// Set the wallet to the user and save again
savedUser.setWallet(wallet);
userRepository.save(savedUser);
return savedUser;
}
}
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@PostMapping
public User createUser(@RequestBody User user) {
return userService.createUserWithWallet(user);
}
}