繁体   English   中英

Jpa 从 MySQL 数据库获取不一致的数据

[英]Jpa is getting inconsistent data, from MySQL database

我正在使用 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 没有正确完成它的工作。 当我尝试 getUser 时,它返回了一个空值; 我在保存方法中做错了什么吗?

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

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

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

referencedColumnName指出它应该指向的 FK。

所以如果你切换它

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

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

但那是我的快速猜测。

名称与引用的列名

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM