我在我的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()会抛出异常?
答案 0 :(得分:0)
从db
加载Car
实体时
您是否完全确定此对象已完全加载?
如果它已加载延迟,Engine
id以及其他属性尚未加载,因此异常。我建议你在每个级别都使用Hibernate.initialize(obj)
来查看失败的确切位置。