【问题标题】:Jpa is getting inconsistent data, from MySQL databaseJpa 从 MySQL 数据库中获取不一致的数据
【发布时间】:2020-04-23 14:51:54
【问题描述】:

我正在使用 Jpa 与数据库通信,但我获取的数据不一致。我有一个用户类与教师类具有 OneToOne 关系。

@OneToOne(mappedBy="user")
private Teacher teacher; // From user class

@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="user_id", referencedColumnName="id")
private User user;  // from the teacher class

我正在通过以下方式拯救一位老师:

public Teacher save(Teacher teacher, Long id)
{
    User user;
    Optional<User> ifUser = userRepo.findById(id);
    if(ifUser.isPresent()) {
        user= ifUser.get();
        user.setTeacher(teacher);
        user.setCompletedInfo(1);
        teacher.setUser(user);
        return teacherRepo.save(teacher);
    }else {
        System.out.println("Couldn't find any user here...");
        return null;
    }
}

其中 userRepo 和 teacherRepo 是从 JpaRepository 扩展而来的接口。到目前为止,它的工作原理非常酷。信息在数据库中得到更新。但是当我从数据库中获取信息时,它告诉我

 user.getCompletedInfo()

为空。同时我可以在数据库中看到该值:

user.getCompletedInfo() =1;

数据库是 MySql,我认为解决问题的一种可能方法是我从某个地方创建的新用户对象中获取一些信息。 更多项目在 Github:https://github.com/shpendpalushi/JavaWeb/tree/For_Project

编辑: 从一些单元测试中,我发现在教师服务中 setUser 没有正确地完成它的工作。当我尝试获取用户时,它返回了一个空值; 我在保存方法中做错了吗?

【问题讨论】:

  • But when I get the info from the database, it shows me that 如何从数据库中获取它?我想当它是救老师,对不对?然后那个方法保存返回老师,然后获取用户然后获取该字段,对吗?
  • 抱歉误导了,没错

标签: java mysql hibernate spring-boot jpa


【解决方案1】:

在 github 上查看您的代码后,我相信您混淆了您的参考

@JoinColumn(name="user_id", referencedColumnName="id")
private User user;

name 指出应该使用当前实体中的哪一列。

referencedColumnName 正在指出它应该指向的 FK。

所以如果你切换它

@JoinColumn(name="id", referencedColumnName="user_id")

您是说,实体教师中的列 id 应该指向用户中的列 user_id。

但这是我的快速猜测。

name vs referencedColumnName

【讨论】:

  • 从我从baeldung 看到的,它曾经以我的方式做,无论如何它尝试改变它,但仍然是一样的。结果仍然为空,并且在数据库中更新。
猜你喜欢
  • 2023-04-05
  • 2017-12-07
  • 1970-01-01
  • 2017-07-19
  • 2021-08-23
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多