Я слежу за этим блогом Влада , чтобы реализовать отношение один-к-одному в ч / б моих двух сущностях User
и JobProfile
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "native")
@GenericGenerator(name = "native", strategy = "native")
@Column(name = "user_id", unique = true, nullable = false)
private Integer userId;
@Column(name = "unique_id", unique = true, length = 45, updatable = false)
private String uniqueId;
@Column(name = "email", unique = true, length = 45, updatable = false)
private String email;
}
@Entity
@Table(name = "job_profile")
public class JobProfile {
@Id
private Integer id;
@OneToOne(fetch = FetchType.LAZY)
@MapsId
private User user;
@Column(name = "is_looking_job")
private Boolean isLookingJob;
}
Идея в том, что мой клиент отправит детали работы для пользователя. Данные (я уменьшил для простоты) были бы как:
{
"isLookingJob": правда
}
Контроллер будет отвечать за создание JobProfile
для пользователя.
public void saveUserExperience(Principal principal, @RequestBody UserExperienceDto experienceDto) {
User user = userService.findByEmail(principal.getName());
JobProfile jobProfile = new JobProfile();
jobProfile.setUser(user);
JobHistory jobHistory = new JobHistory();
jobHistory.setIsLookingJob(experienceDto.getIsWilling())
jobProfileDao.save(jobProfile);
}
JobProfileDao
- это интерфейс Spring-Data-Jpa.
public interface JobProfileDao extends JpaRepository<JobProfile, Integer> {
}
Итак, операция сохранения здесь генерирует неправильную команду SQL (insert into job_profile (is_looking_job, is_willing, user_user_id) values (?, ?, ?)
) и, следовательно, выдает ошибку could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute statement
Я очень озадачен, увидев, откуда появился столбец user_user_id
.
Я использую загрузку Spring с Spring-data-Jpa + Hibernate для своего проекта.