java - 如何在 Hibernate 中将相关对象更改为另一个对象?

标签 java spring hibernate jpa

我有 2 个实体。首先是:

@ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "team_id")
    private Team team;

我想创建一个方法,可以将数据库中的 team_id 更改为另一个。 我怎样才能实现它? 我尝试通过存储库方法从数据库中查找 2 个对象,并将新对象设置为第一个对象。

我尝试过:

  public void fromTo(String from, String to, String playerName) {
        Player player = playerRepo.findByName(playerName);

        Long teamIdOfPlayer = player.getTeam().getId();

        Team teamFrom = teamRepo.findByName(from);

        if (teamFrom.getId().equals(teamIdOfPlayer)) {
            teamRepo.findByName(to).setId(teamIdOfPlayer);
            player.setTeam(teamRepo.findByName(to));
        }
        teamRepo.save(teamFrom);
        playerRepo.save(player);
    }

最佳答案

由于您使用 JPA 并有一个为您提供团队的方法,因此您可以在当前对象上设置团队并保留该对象。 JPA(JPA 提供者)将负责更新 team_id

类似这样的事情:

    MyObject x = ... 
    MyObject x2 = ... 
    x2.setTeam(x.getTeam())
    dao.persist(x2); 

编辑:您添加了一个片段。你在事务中运行它吗? (因为这样,我无法发表评论)

关于java - 如何在 Hibernate 中将相关对象更改为另一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59521240/

相关文章:

Java 泛型 : Why does an explicit cast cause a compiler error, 但变量赋值没有

javascript - 数据表 - 请求的未知参数

java - 如何连接辅助表中非主键列的表?

java - oracle number(22,2) 的 hibernate 映射 java 类型

mysql - Spring Boot 不会从 application.properties 为数据库创建自动配置

java - Java 中的可中断网络 I/O

java - JVM 可以只信任一次运行的自签名证书吗?

java - 如何使用java在给定时间限制内在 session 超时之前将数据插入数据库?

java - Spring @Value 对待原语和包装类的方式不同

java - Spring Security Oauth2——多用户认证服务