我在spring使用Hibernate。
我有这样的模型班。
@Entity @Table(name = "forumtopic") public final class Forumtopic extends AbstractUserTracking implements java.io.Serializable { /**SNIP **/ private Forumcategory forumcategory; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "FkForumcategoryId", nullable = false) public Forumcategory getForumcategory() { return this.forumcategory; } public void setForumcategory(final Forumcategory forumcategory) { this.forumcategory = forumcategory; } }
它通常可以正常工作,但是Category不会延迟加载,而是在ForumEntry加载后急切加载。
``
Hibernate: select forumtopic0_.PkId as PkId19_0_, forumtopic0_.CreateDate as CreateDate19_0_, forumtopic0_.FkCreateUserId as FkCreate3_19_0_, forumtopic0_.FkLastUserId as FkLastUs4_19_0_, forumtopic0_.LastChange as LastChange19_0_, forumtopic0_.FkForumcategoryId as FkForum10_19_0_, forumtopic0_.PublishCategory as PublishC6_19_0_, forumtopic0_.State as State19_0_, forumtopic0_.Text as Text19_0_, forumtopic0_.Topic as Topic19_0_, forumtopic0_.FkTpUserId as FkTpUserId19_0_ from forumtopic forumtopic0_ where forumtopic0_.PkId=? Hibernate: select forumcateg0_.PkId as PkId17_0_, forumcateg0_.CreateDate as CreateDate17_0_, forumcateg0_.Name as Name17_0_, forumcateg0_.FkRequestId as FkReques4_17_0_, forumcateg0_.FkTpUserId as FkTpUserId17_0_ from forumcategory forumcateg0_ where forumcateg0_.PkId=?
完全没有将getter称为ForumCategory是在ForumTopic之后立即加载的。
这个问题出现在我所有的@ManyToOne关联中。但是,@OneToMany关联会延迟加载。
我正在使用maven2进行构建。这些是我的依赖。 ``
<dependency> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> <version>2.5.6</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.3.1.GA</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>ejb3-persistence</artifactId> <version>1.0.2.GA</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-annotations</artifactId> <type>jar</type> <version>3.4.0.GA</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <type>jar</type> <version>3.4.0.GA</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-search</artifactId> <version>3.1.0.GA</version> </dependency>
有人可以帮我了解发生了什么吗?
我猜这是由于您的类被声明为final,因此Hibernate无法为它们生成延迟代理。尝试final从类声明中删除。
final