HHH-15090 Test lazy loading with extended bytecode enhancement and inheritance
This commit is contained in:
parent
223856cfd0
commit
f0331f32e9
|
@ -0,0 +1,109 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
|
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||||
|
*/
|
||||||
|
package org.hibernate.test.bytecode.enhancement.lazy;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate;
|
||||||
|
|
||||||
|
import org.hibernate.Hibernate;
|
||||||
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
|
import org.hibernate.cfg.Configuration;
|
||||||
|
|
||||||
|
import org.hibernate.testing.TestForIssue;
|
||||||
|
import org.hibernate.testing.bytecode.enhancement.BytecodeEnhancerRunner;
|
||||||
|
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.FetchType;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.ManyToOne;
|
||||||
|
|
||||||
|
@RunWith(BytecodeEnhancerRunner.class)
|
||||||
|
@TestForIssue(jiraKey = "HHH-15090")
|
||||||
|
public class LazyLoadingAndInheritanceTest extends BaseCoreFunctionalTestCase {
|
||||||
|
|
||||||
|
private Long containingID;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<?>[] getAnnotatedClasses() {
|
||||||
|
return new Class<?>[] { Containing.class, Contained.class, ContainedExtended.class };
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void configure(Configuration configuration) {
|
||||||
|
configuration.setProperty( AvailableSettings.USE_SECOND_LEVEL_CACHE, "false" );
|
||||||
|
configuration.setProperty( AvailableSettings.ENABLE_LAZY_LOAD_NO_TRANS, "true" );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void prepare() {
|
||||||
|
doInHibernate( this::sessionFactory, s -> {
|
||||||
|
Containing containing = new Containing();
|
||||||
|
ContainedExtended contained = new ContainedExtended( "George" );
|
||||||
|
containing.contained = contained;
|
||||||
|
s.persist( contained );
|
||||||
|
s.persist( containing );
|
||||||
|
containingID = containing.id;
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
doInHibernate( this::sessionFactory, s -> {
|
||||||
|
Containing containing = s.load( Containing.class, containingID );
|
||||||
|
Contained contained = containing.contained;
|
||||||
|
assertThat( contained ).isNotNull();
|
||||||
|
assertThat( Hibernate.isPropertyInitialized( contained, "name" ) ).isFalse();
|
||||||
|
assertThat( contained.name ).isNotNull();
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "Containing")
|
||||||
|
private static class Containing {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||||
|
public Long id;
|
||||||
|
|
||||||
|
@ManyToOne(fetch = FetchType.LAZY, optional = false)
|
||||||
|
public Contained contained;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "Contained")
|
||||||
|
private static class Contained {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||||
|
public Long id;
|
||||||
|
|
||||||
|
public String name;
|
||||||
|
|
||||||
|
Contained() {
|
||||||
|
}
|
||||||
|
|
||||||
|
Contained(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "ContainedExtended")
|
||||||
|
private static class ContainedExtended extends Contained {
|
||||||
|
|
||||||
|
ContainedExtended() {
|
||||||
|
}
|
||||||
|
|
||||||
|
ContainedExtended(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue