我有一个默认值保存在数据库中的应用程序。例如,具有属性 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 :
Person p = new Person();
p.setName("Smith");
personRepository.save(p);
如果我尝试创建一个 id 为 0 并命名为“纽约”的城市实例,我将有一个“TransientObjectException:对象引用未保存的瞬态实例”:绝对不是一个好的解决方案。
如果我在表定义中放置一个默认值,我将不得不在保存后从数据库中重新加载实体。
我可以在保存 Person 之前加载城市,但我也有 2 次访问数据库的权限。
这两个解决方案对我不利,因为我必须从数据库中显式加载 City 实例。有没有办法自动做到这一点?(也许是拦截器或类似的东西)
注意:我使用休眠 4 和弹簧 3.2