fix bug that newly created 'tableGroupJoin' is not added to its 'joinedGroup'

This commit is contained in:
Nathan Xu 2020-03-12 09:30:04 -04:00 committed by Steve Ebersole
parent 70b6de476c
commit 62e9a674ad
2 changed files with 66 additions and 1 deletions

View File

@ -207,12 +207,14 @@ public class EmbeddedCollectionPart implements CollectionPart, EmbeddableValuedF
final TableGroup tableGroup = new CompositeTableGroup( navigablePath, this, lhs ); final TableGroup tableGroup = new CompositeTableGroup( navigablePath, this, lhs );
return new TableGroupJoin( final TableGroupJoin tableGroupJoin = new TableGroupJoin(
navigablePath, navigablePath,
sqlAstJoinType, sqlAstJoinType,
tableGroup, tableGroup,
null null
); );
lhs.addTableGroupJoin( tableGroupJoin );
return tableGroupJoin;
} }
@Override @Override

View File

@ -0,0 +1,63 @@
package org.hibernate.orm.test.sql.results.graph.embeddable.internal;
import java.util.Set;
import javax.persistence.ElementCollection;
import javax.persistence.Embeddable;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.testing.orm.junit.DomainModel;
import org.hibernate.testing.orm.junit.SessionFactory;
import org.hibernate.testing.orm.junit.SessionFactoryScope;
import org.junit.jupiter.api.Test;
/**
* @author Nathan Xu
*/
@DomainModel(
annotatedClasses = {
EmbeddableFetchImplTests.ExpressCompany.class,
EmbeddableFetchImplTests.Address.class,
EmbeddableFetchImplTests.Country.class
}
)
@SessionFactory
public class EmbeddableFetchImplTests {
@Test
void testTableGroupJoin(SessionFactoryScope scope) {
scope.inTransaction(
// will throw exception if the patch accompanying this test is not applied
// for 'country' alias shows up in 'select', but not in 'from' clause
session -> session.get( ExpressCompany.class, "nonexistent" )
);
}
@Entity(name = "ExpressCompany")
public static class ExpressCompany {
@Id
String name;
@ElementCollection(fetch = FetchType.EAGER)
Set<Address> shipAddresses;
}
@Embeddable
public static class Address {
@ManyToOne
@Fetch(FetchMode.JOIN)
Country country;
}
@Entity(name = "Country")
public static class Country {
@Id
String name;
}
}