【发布时间】:2013-09-09 00:17:54
【问题描述】:
我有一个应用程序,其默认值保存在数据库中。 例如,具有属性 City 的 Person 类,默认值为“New York”,id 为 0。
@Entity
public class Person {
@Id
private Integer personId;
private String name;
@ManyToOne
private City city;
}
@Entity
public class City {
@Id
private Integer cityId;
private String cityName;
}
在数据库中:
+--------+------------+
| cityId | cityName |
+--------+------------+
| 0 | 'New York' |
+--------+------------+
而我想做的是保存一个新的人:
Person p = new Person();
p.setName("Smith");
personRepository.save(p);
如果我尝试创建一个 id 为 0 并命名为“New York”的城市实例,我将得到一个“TransientObjectException:对象引用一个未保存的瞬态实例”:绝对不是一个好的解决方案。
如果我在表定义中放置一个默认值,我将不得不在保存后从数据库中重新加载实体。
我可以在保存 Person 之前加载城市,但我还有 2 次访问数据库的权限。
这两个解决方案对我不利,因为我必须从数据库中显式加载 City 实例。有没有办法自动做到这一点? (可能是拦截器或类似的东西)
注意:我使用 hibernate 4 和 spring 3.2
【问题讨论】:
标签: hibernate jpa default-value many-to-one