坚持包含属性为另一个类

时间:2015-05-17 19:52:35

标签: java hibernate one-to-one

我是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?与我的问题有点类似,但是我不能让解决方案对我有用。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您需要删除' insertable = false'和' updatable = false'属性。如果这种关联是双向的并且是从另一方(城市)进行管理,那么这将是有意义的。这不是这里的情况。