Jpa получает противоречивые данные из базы данных MySQL - PullRequest
2 голосов
/ 06 января 2020

Я использую Jpa для связи с базой данных, но полученные данные противоречивы. У меня есть пользовательский класс, имеющий отношение OneToOne к классу Teacher.

@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, он возвращал мне ноль; Я делаю что-то не так в методе сохранения?

1 Ответ

1 голос
/ 06 января 2020

После просмотра вашего кода на github я считаю, что вы перепутали свои ссылки

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

name указывает, какой столбец в текущей сущности следует использовать.

referencedColumnName указывает, на какой FK он должен указывать.

поэтому, если вы его переключите

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

Вместо этого вы говорите, что идентификатор столбца в учителе сущности должен указывать на столбец user_id в user.

Но это мое быстрое предположение.

имя против referencedColumnName

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...