当一条数据从另一个表创建一对一关系时,如何自动向表中插入数据?

问题描述 投票:0回答:2

所以基本上我有两张具有一对一关系的表。

Table 1: Users
    id
    username

Table 2: Wallet
    id
    totalamount
    user_id

但我不知道如何在创建用户时自动添加钱包。 现在我只知道spring mvc,所以我在DAO中写插入方法吗?

java eclipse spring-mvc
2个回答
0
投票

如果你不使用JPA,那么是的,你必须自己处理数据库交互。您可以创建 DAO 或专用服务来编写插入方法。

如果您使用 Hibernate 作为 JPA 并为每个表创建

@Entity
类,则只需在映射中提及
CascadeType
即可实现这一点。

@OneToOne(cascade = CascadeType.ALL)

然后只需保存 1 个类,另一个类就会自动插入到数据库中。您可以根据您的要求选择不同的CascadeType

您还可以查看其他一些问题 -
如何在spring boot上不使用jpa从oracle获取数据
用简单语言来说hibernate是什么?
Hibernate:级联类型


0
投票

使用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);
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.