访问延迟加载字段的id时的LazyInitialization异常

时间:2013-03-28 09:46:24

标签: java hibernate lazy-loading

我在我的java项目中使用Hibernate。我有以下实体结构:

@Entity
@Table(name = "car")
public class Car implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "engine_id", nullable = false)
    private Engine engine;
}

现在当我从db加载Car实体时,显然Engine实体不会被加载,因为它是延迟加载的字段,但是Engine的id(主键)将被加载。

现在,如果我执行car.getEngine()。getId(),那么它会抛出LazyInitialization Exception。由于Id部分已经加载,为什么getId()会抛出异常?

1 个答案:

答案 0 :(得分:0)

  

从db

加载Car实体时

您是否完全确定此对象已完全加载?

如果它已加载延迟,Engine id以及其他属性尚未加载,因此异常。我建议你在每个级别都使用Hibernate.initialize(obj)来查看失败的确切位置。