Skip to content

Commit d5ed3a8

Browse files
barreirosebersole
authored andcommitted
HHH-8559 - Bytecode enhancemer: add test for HHH-3949
Conflicts: hibernate-core/src/main/java/org/hibernate/tuple/entity/PojoEntityTuplizer.java
1 parent 44a02e5 commit d5ed3a8

File tree

8 files changed

+264
-0
lines changed

8 files changed

+264
-0
lines changed

hibernate-core/src/test/java/org/hibernate/test/bytecode/enhancement/EnhancerTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,17 @@
66
*/
77
package org.hibernate.test.bytecode.enhancement;
88

9+
import org.hibernate.testing.TestForIssue;
910
import org.hibernate.testing.junit4.BaseUnitTestCase;
1011
import org.hibernate.test.bytecode.enhancement.association.ManyToManyAssociationTestTask;
1112
import org.hibernate.test.bytecode.enhancement.association.OneToManyAssociationTestTask;
1213
import org.hibernate.test.bytecode.enhancement.association.OneToOneAssociationTestTask;
1314
import org.hibernate.test.bytecode.enhancement.basic.BasicEnhancementTestTask;
1415
import org.hibernate.test.bytecode.enhancement.dirty.DirtyTrackingTestTask;
16+
import org.hibernate.test.bytecode.enhancement.join.HHH3949TestTask1;
17+
import org.hibernate.test.bytecode.enhancement.join.HHH3949TestTask2;
18+
import org.hibernate.test.bytecode.enhancement.join.HHH3949TestTask3;
19+
import org.hibernate.test.bytecode.enhancement.join.HHH3949TestTask4;
1520
import org.hibernate.test.bytecode.enhancement.lazy.LazyLoadingIntegrationTestTask;
1621
import org.hibernate.test.bytecode.enhancement.lazy.LazyLoadingTestTask;
1722
import org.junit.Test;
@@ -44,4 +49,13 @@ public void testLazy() {
4449
EnhancerTestUtils.runEnhancerTestTask( LazyLoadingIntegrationTestTask.class );
4550
}
4651

52+
@Test
53+
@TestForIssue( jiraKey = "HHH-3949" )
54+
public void testHHH3949() {
55+
EnhancerTestUtils.runEnhancerTestTask( HHH3949TestTask1.class );
56+
EnhancerTestUtils.runEnhancerTestTask( HHH3949TestTask2.class );
57+
EnhancerTestUtils.runEnhancerTestTask( HHH3949TestTask3.class );
58+
EnhancerTestUtils.runEnhancerTestTask( HHH3949TestTask4.class );
59+
}
60+
4761
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package org.hibernate.test.bytecode.enhancement.join;
2+
3+
import org.hibernate.Session;
4+
import org.hibernate.Transaction;
5+
import org.hibernate.cfg.Configuration;
6+
import org.hibernate.cfg.Environment;
7+
8+
import org.hibernate.test.bytecode.enhancement.AbstractEnhancerTestTask;
9+
10+
public abstract class AbstractHHH3949TestTask extends AbstractEnhancerTestTask {
11+
12+
public Class<?>[] getAnnotatedClasses() {
13+
return new Class<?>[] {Person.class, Vehicle.class};
14+
}
15+
16+
public void prepare() {
17+
Configuration cfg = new Configuration();
18+
cfg.setProperty( Environment.ENABLE_LAZY_LOAD_NO_TRANS, "true" );
19+
cfg.setProperty( Environment.USE_SECOND_LEVEL_CACHE, "false" );
20+
super.prepare( cfg );
21+
22+
Session session = getFactory().openSession();
23+
Transaction tx = session.beginTransaction();
24+
25+
Person person1 = new Person( "Johnny" );
26+
Person person2 = new Person( "Ricky" );
27+
Person person3 = new Person( "Rosy" );
28+
session.save( person1 );
29+
session.save( person2 );
30+
session.save( person3 );
31+
32+
Vehicle vehicle1 = new Vehicle( "Volkswagen Golf" );
33+
vehicle1.setDriver( person1 );
34+
session.save( vehicle1 );
35+
36+
Vehicle vehicle2 = new Vehicle( "Subaru Impreza" );
37+
vehicle2.setDriver( person2 );
38+
person2.setVehicle( vehicle2 );
39+
session.save( vehicle2 );
40+
41+
Vehicle vehicle3 = new Vehicle( "Renault Truck" );
42+
43+
session.save( vehicle3 );
44+
45+
tx.commit();
46+
session.close();
47+
}
48+
49+
protected void cleanup() {
50+
}
51+
52+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.hibernate.test.bytecode.enhancement.join;
2+
3+
import java.util.List;
4+
5+
import org.hibernate.Session;
6+
7+
import org.junit.Assert;
8+
9+
public class HHH3949TestTask1 extends AbstractHHH3949TestTask {
10+
11+
@SuppressWarnings("unchecked")
12+
public void execute() {
13+
Session session = getFactory().openSession();
14+
List<Person> persons = (List<Person>) session.createQuery( "from Person p left join fetch p.vehicle" ).list();
15+
for ( Person person : persons ) {
16+
if ( person.getId() < 3 ) {
17+
Assert.assertNotNull( person.getVehicle() );
18+
Assert.assertNotNull( person.getVehicle().getDriver() );
19+
}
20+
}
21+
session.close();
22+
}
23+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.hibernate.test.bytecode.enhancement.join;
2+
3+
import java.util.List;
4+
5+
import org.hibernate.Session;
6+
7+
import org.junit.Assert;
8+
9+
public class HHH3949TestTask2 extends AbstractHHH3949TestTask {
10+
11+
@SuppressWarnings("unchecked")
12+
public void execute() {
13+
Session session = getFactory().openSession();
14+
List<Vehicle> vehicles = (List<Vehicle>) session.createQuery( "from Vehicle v left join fetch v.driver" )
15+
.list();
16+
for ( Vehicle vehicle : vehicles ) {
17+
if ( vehicle.getId() < 3 ) {
18+
Assert.assertNotNull( vehicle.getDriver() );
19+
Assert.assertNotNull( vehicle.getDriver().getVehicle() );
20+
}
21+
}
22+
session.close();
23+
}
24+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.hibernate.test.bytecode.enhancement.join;
2+
3+
import java.util.List;
4+
5+
import org.hibernate.FetchMode;
6+
import org.hibernate.Session;
7+
8+
import org.junit.Assert;
9+
10+
public class HHH3949TestTask3 extends AbstractHHH3949TestTask {
11+
12+
@SuppressWarnings("unchecked")
13+
public void execute() {
14+
Session session = getFactory().openSession();
15+
List<Person> persons = (List<Person>) session.createCriteria( Person.class ).setFetchMode(
16+
"vehicle",
17+
FetchMode.JOIN
18+
).list();
19+
for ( Person person : persons ) {
20+
if ( person.getId() < 3 ) {
21+
Assert.assertNotNull( person.getVehicle() );
22+
Assert.assertNotNull( person.getVehicle().getDriver() );
23+
}
24+
}
25+
session.close();
26+
}
27+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.hibernate.test.bytecode.enhancement.join;
2+
3+
import java.util.List;
4+
5+
import org.hibernate.FetchMode;
6+
import org.hibernate.Session;
7+
8+
import org.junit.Assert;
9+
10+
public class HHH3949TestTask4 extends AbstractHHH3949TestTask {
11+
12+
@SuppressWarnings("unchecked")
13+
public void execute() {
14+
Session session = getFactory().openSession();
15+
List<Vehicle> vehicles = (List<Vehicle>) session.createCriteria( Vehicle.class ).setFetchMode(
16+
"driver",
17+
FetchMode.JOIN
18+
).list();
19+
for ( Vehicle vehicle : vehicles ) {
20+
if ( vehicle.getId() < 3 ) {
21+
Assert.assertNotNull( vehicle.getDriver() );
22+
Assert.assertNotNull( vehicle.getDriver().getVehicle() );
23+
}
24+
}
25+
session.close();
26+
}
27+
28+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package org.hibernate.test.bytecode.enhancement.join;
2+
3+
import java.io.Serializable;
4+
import javax.persistence.*;
5+
6+
import org.hibernate.annotations.LazyToOne;
7+
import org.hibernate.annotations.LazyToOneOption;
8+
9+
@Entity
10+
public class Person implements Serializable {
11+
@Id
12+
@GeneratedValue
13+
private Integer id;
14+
15+
private String name;
16+
17+
@OneToOne(optional = true, mappedBy = "driver", fetch = FetchType.LAZY)
18+
@LazyToOne(LazyToOneOption.NO_PROXY)
19+
private Vehicle vehicle;
20+
21+
public Vehicle getVehicle() {
22+
return vehicle;
23+
}
24+
25+
public void setVehicle(Vehicle vehicle) {
26+
this.vehicle = vehicle;
27+
}
28+
29+
public Integer getId() {
30+
return id;
31+
}
32+
33+
public String getName() {
34+
return name;
35+
}
36+
37+
public void setName(String name) {
38+
this.name = name;
39+
}
40+
41+
public Person() {
42+
}
43+
44+
public Person(String name) {
45+
this.name = name;
46+
}
47+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package org.hibernate.test.bytecode.enhancement.join;
2+
3+
import java.io.Serializable;
4+
import javax.persistence.Entity;
5+
import javax.persistence.FetchType;
6+
import javax.persistence.GeneratedValue;
7+
import javax.persistence.Id;
8+
import javax.persistence.OneToOne;
9+
10+
@Entity
11+
public class Vehicle implements Serializable {
12+
13+
@Id
14+
@GeneratedValue
15+
private Integer id;
16+
17+
private String name;
18+
19+
@OneToOne(optional = true, fetch = FetchType.LAZY)
20+
private Person driver;
21+
22+
public Integer getId() {
23+
return id;
24+
}
25+
26+
public String getName() {
27+
return name;
28+
}
29+
30+
public void setName(String name) {
31+
this.name = name;
32+
}
33+
34+
public Person getDriver() {
35+
return driver;
36+
}
37+
38+
public void setDriver(Person driver) {
39+
this.driver = driver;
40+
}
41+
42+
public Vehicle() {
43+
}
44+
45+
public Vehicle(String name) {
46+
this.name = name;
47+
}
48+
49+
}

0 commit comments

Comments
 (0)