java - Jpa 从 MySQL 数据库中获取不一致的数据
问题描述
我正在使用 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 没有正确地完成它的工作。当我尝试获取用户时,它返回了一个空值;我在保存方法中做错了吗?
解决方案
在 github 上查看您的代码后,我相信您混淆了您的参考资料
@JoinColumn(name="user_id", referencedColumnName="id")
private User user;
name
指出应该使用当前实体中的哪一列。
referencedColumnName
正在指出它应该指向的 FK。
所以如果你切换它
@JoinColumn(name="id", referencedColumnName="user_id")
相反,您是说,实体教师中的列 id 应指向 user 中的 user_id 列。
但这是我的快速猜测。
推荐阅读
- javascript - 如何在 e.preventDefault() 之后恢复提交事件的执行?
- r - 在数据框中排列列
- javascript - javascript 包括 math.js
- ruby-on-rails - 推送到 heroku 失败 - 找不到错误
- javascript - NodeJS 在 JSON 文件字符串中使用变量
- nginx - 我不明白 nginx 如何在我的设置中找到 gunicorn
- javascript - 将变量从 JavaScript 传递到 HTML 并将 HTML 按钮输入传递到 JavaScript
- php - 仅允许缓存来自特定 url 的图像
- android - 如何使用 GoogleSignInAccount 通过 Google 的 REST 服务进行身份验证?
- python - 查找整数列表中是否存在山谷