Hibernate ManyToOne avec FetchType.LAZY ne récupère pas paresseux
Je suis de l'utilisation d'Hibernate avec le printemps.
J'ai un modèle de classe comme ça.
@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;
}
}
Cela fonctionne en général, mais la Catégorie n'est pas chargé paresseux, mais avec impatience après la ForumEntry a été chargé.
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=?
Bien que la lecture n'a pas été appelé la ForumCategory est chargé juste après ForumTopic.
Ces problèmes apparaît dans tous mes @ManyToOne-associations. Toutefois @OneToMany associe dans ce cas sont chargés paresseusement.
Je suis à l'aide de maven2 pour la construction. Ce sont mes dépendances.
<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>
Quelqu'un peut s'il vous plaît aidez-moi à comprendre ce qui se passe?
source d'informationauteur KarlsFriend
Vous devez vous connecter pour publier un commentaire.
Je suppose que c'est causé par le fait que les classes sont déclarées comme
final
par conséquent, Hibernate ne peut pas générer des paresseux procurations pour eux. Essayez de supprimerfinal
de déclarations de classe.Ressemble à la transaction ou à la fermeture de la session après le retour ForumTopic. Par conséquent, il devient détaché de l'entité. Lorsque vous essayez de faire une getForumCategory il n'y a pas de session à l'opération. Vous pouvez prefetch la ForumCategory dans la même séance,
Dans votre getForumTopic, avant de retourner une liste (en supposant que vous avez un getAllForumTopic)
Cela ira chercher les ForumCategory dans la même session. Sinon, vous devez créer une transaction dans l'appel de la fonction de getAllForumTopic et l'utilisation de la même transaction où vous en avez besoin à appeler getForumCategory.