2013-03-28 61 views
2

我在我的java项目中使用Hibernate。我有以下实体结构:访问惰性加载字段的ID时出现LazyInitialization异常

@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; 
} 

现在,当我从数据库加载Car实体,显然Engine实体将不会被加载,因为它是延迟加载的领域,但对于Engine的ID(主键)会加载。

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

+0

请发布例外,如果你得到一个...另外,可能http://stackoverflow.com/questions/9250414/hibernate-getid-is-loading-the-object-even-though-it-is-lazy解释你的问题(如果你的引擎类也注释了你的字段) – MikeN 2013-03-28 10:47:18

回答

0

当我加载从数据库

你真的确认这个对象满载Car实体?

如果它是懒加载的,Engine id以及其他属性尚未加载,因此例外。我建议你在每个级别上玩Hibernate.initialize(obj),看看究竟是哪里出了问题。

相关问题