TransientObjectException

时间:2011-06-28 14:12:54

标签: hibernate spring

Entity
@Table(name = "ADDRESS")
public class Address {

    @Id
    @Column(name = "ID")
    @GeneratedValue
    private int addressid;

    @OneToOne
    @JoinColumn(name = "CITY_ID",nullable = true,insertable=false, updatable=false)
    private City city = new City();

    @OneToOne
    @JoinColumn(name = "DISTRICT_ID",nullable = true,insertable=false, updatable=false)
    private District district = new District();
}

你好, 我有一个名为Address的类,我无法使用DISTRICT_ID = null在hibernate中保存此类。

错误是

org.hibernate.TransientObjectException:object引用未保存的瞬态实例 - 在刷新之前保存瞬态实例:form.District

我只是不知道自己错过了什么......

4 个答案:

答案 0 :(得分:2)

如果您希望districtnull,那么它应该是null,而不是指向新的瞬态实例:

@OneToOne
@JoinColumn(name = "DISTRICT_ID",nullable = true,insertable=false, updatable=false)     
private District district = null;

答案 1 :(得分:1)

也许您应该考虑在同一个对象中使用city_id和city_name,如果您希望只读取City和District表,那么您的城市和地区就不会被保留。

答案 2 :(得分:0)

地区是否注明@Entity
您可能需要在cascade上指定@OneToOne 示例:@OneToOne(cascade={CascadeType.PERSIST})

答案 3 :(得分:0)

如果要使用null DISTRICT_ID保存区域,则不能将其用作主键,因此无法使用@Id对其进行注释。您必须为区实体选择不同的ID。