Я довольно новичок в Hibernate, и мне трудно понять, как решить следующую проблему:
У меня есть класс с именем User, который выглядит так:
@Entity
@Table(name = "users")
public class User implements Serializable {
@Id
@Column(name = "id_user")
int id_user;
@Column(name = "name")
String name;
@Column(name = "surname")
String surname;
@OneToOne
@JoinColumn(name = "city", referencedColumnName = "id_city", nullable = false, insertable = false, updatable = false)
City city;
И связанный класс:
@Entity
@Table(name = "cities")
public class City implements Serializable {
@Id
@Column(name = "id_city")
int id_city;
@Column(name = "name")
String name;
Как вы понимаете, таблица «Города» содержит все города страны, и их нельзя добавлять или удалять, они просто нужны для ссылок. Я хотел бы, чтобы идентификатор города был сохранен в таблице пользователей (как значение smallint (6)), но это поле остается пустым, когда я сохраняю пользователя. Все остальные поля сохраняются правильно, и я проверил, что во время выполнения свойство city пользователя правильно установлено с городом. Связанный код в моем сервлете:
active = new User();
active.setName(name);
City arrival = (City) session.get(City.class, "1");
active.setArrival(arrival);
session.save(active);
session.getTransaction().commit();
Я не знаю, лучший ли это способ сделать это. Я установил однонаправленное отношение OneToOne между классами. Может быть, это неправильно. Я не знаю, вроде бы все работает нормально, но это свойство. Я проверил множество тем, и эта Hibernate: как сопоставить один с другим, где B является свойством A? похож на мою проблему, но я не могу заставить решение работать на меня.
Любая помощь будет оценена по достоинству.