[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-5165) FetchMode=Eager not respected, N+1 SELECT Problem
Gail Badner (JIRA)
noreply at atlassian.com
Tue Apr 27 13:57:35 EDT 2010
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-5165?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=36717#action_36717 ]
Gail Badner commented on HHH-5165:
----------------------------------
Does this happen using 3.5.1?
If so, please check to see if it has already been reported for 3.5.x:
http://opensource.atlassian.com/projects/hibernate/secure/IssueNavigator.jspa?mode=hide&requestId=11080
Thanks,
Gail
> FetchMode=Eager not respected, N+1 SELECT Problem
> -------------------------------------------------
>
> Key: HHH-5165
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5165
> Project: Hibernate Core
> Issue Type: Bug
> Components: core
> Affects Versions: 3.3.2
> Environment: (as Maven artifacts)
> org.hibernate:hibernate-core:jar:3.3.2.GA
> org.hibernate:hibernate-annotations:jar:3.4.0.GA
> org.hibernate:ejb3-persistence:jar:1.0.2.GA
> org.hibernate:hibernate-validator:jar:3.1.0.GA
> org.hibernate:hibernate-commons-annotations:jar:3.1.0.GA
> org.hibernate:hibernate-search:jar:3.1.0.GA
> org.hibernate:hibernate-entitymanager:jar:3.4.0.GA
> Reporter: David Bernhard
> Priority: Minor
>
> Two classes A, B with 1:n relationship. Fetching all instances of B with an empty DetachedCriteria instance does not repsect FetchMode.JOIN but issues a SELECT for each A (N+1 SELECT problem).
> This causes the bug:
> findByCriteria(DetachedCriteria.forClass(B.class));
> This works - but I need that second setFetchMode:
> findByCriteria(DetachedCriteria.forClass(B.class)
> .setFetchMode("a", FetchMode.JOIN)
> .setFetchMode("a.bs", FetchMode.JOIN)
> );
> HQL works too. Here are two classes that cause the bug:
> @Entity @Table(name = "A")
> @SequenceGenerator(name = "keyid_generator", sequenceName = "A_sequence")
> public class A extends AbstractIntKeyIntOptimisticLockingDto {
> private String name;
> private Set<B> bs;
> @OneToMany(mappedBy = "a", fetch = FetchType.EAGER)
> @Fetch(FetchMode.JOIN)
> public Set<B> getBs() {
> return bs;
> }
> public void setBs(Set<B> bs) {
> this.bs = bs;
> }
> public String getName() {
> return name;
> }
> public void setName(String name) {
> this.name = name;
> }
> }
> @Entity @Table(name = "B")
> @SequenceGenerator(name = "keyid_generator", sequenceName = "B_sequence")
> public class B extends AbstractIntKeyIntOptimisticLockingDto {
> private String name;
> private A a;
> @ManyToOne(fetch = FetchType.EAGER)
> @JoinColumn(name = "a", nullable = false,
> unique = false, updatable = false)
> @Fetch(FetchMode.JOIN)
> public A getA() {
> return a;
> }
> public void setA(A a) {
> this.a = a;
> }
> public String getName() {
> return name;
> }
> public void setName(String name) {
> this.name = name;
> }
> }
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list