ManyToOne默认值

时间:2013-09-05 08:43:05

标签: hibernate jpa default-value many-to-one

我有一个应用程序,其数据库中保留了默认值。 例如,具有默认属性City的类Person是ID为“New York”。

@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:object引用一个未保存的瞬态实例”:绝对不是一个好的解决方案。

如果我在表定义中放入一个默认值,我将不得不在保存后从数据库重新加载实体。

我可以在保存Person之前加载城市,但我也可以访问数据库。

这两个解决方案对我不利,因为我必须从数据库中明确加载City实例。有没有办法自动完成? (也许是一个拦截器或类似的东西)

注意:我使用的是hibernate 4和spring 3.2

1 个答案:

答案 0 :(得分:1)

  

如果我尝试创建一个id为0并命名为“New York”的城市实例,我将会有一个“TransientObjectException:object引用一个未保存的瞬态实例”

不应该这样。也许这是由于id默认城市为0而造成的。请尝试使用1

或者,您可以使用Session.load() / EntityManager.getReference()获取惰性代理,而无需触及数据库。