我是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;
正如您所想,表“城市”包含一个国家/地区的所有城市,并且它们不会被添加或删除,它们只是被引用。 我希望将city的id保存在users表中(作为smallint(6)值),但是当我保存用户时该字段保持为null。所有其他字段都已正确保存,我已检查过执行时,用户的属性城市是否正确设置了城市。我的servlet中的相关代码是:
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: how do I map one to one where B is a property of A?与我的问题有点类似,但是我不能让解决方案对我有用。
任何帮助都将不胜感激。
答案 0 :(得分:0)
您需要删除' insertable = false'和' updatable = false'属性。如果这种关联是双向的并且是从另一方(城市)进行管理,那么这将是有意义的。这不是这里的情况。