Testcase for HHH-11986 added
HHH-11986 : Changed test code to follow conventions of other bytecode enhancement tests; reformatted test code
This commit is contained in:
parent
1616b3de37
commit
3292a83223
|
@ -0,0 +1,98 @@
|
|||
package org.hibernate.test.bytecode.enhancement.lazy.group;
|
||||
|
||||
import javax.persistence.Access;
|
||||
import javax.persistence.AccessType;
|
||||
import javax.persistence.Basic;
|
||||
import javax.persistence.CascadeType;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.FetchType;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.OneToOne;
|
||||
|
||||
import org.hibernate.annotations.LazyGroup;
|
||||
import org.hibernate.annotations.LazyToOne;
|
||||
import org.hibernate.annotations.LazyToOneOption;
|
||||
|
||||
/**
|
||||
* Source of a LazyToOne - relationship with FK on the other side
|
||||
*
|
||||
* @author Jan-Oliver Lustig, Sebastian Viefhaus
|
||||
*/
|
||||
@Entity
|
||||
@Access(AccessType.FIELD)
|
||||
public class LGMB_From {
|
||||
|
||||
@Column(length = 50, nullable = false)
|
||||
private String name;
|
||||
|
||||
// Lazy-Attribut without LazyGroup-Annotation (therefore Default-LazyGroup)
|
||||
@Column(length = 65000, columnDefinition = "text")
|
||||
@Basic(fetch = FetchType.LAZY)
|
||||
private String bigText;
|
||||
|
||||
// Lazy-Assoziation with mappdedBy in own LazyGroup
|
||||
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "fromRelation", optional = true)
|
||||
@LazyToOne(LazyToOneOption.NO_PROXY)
|
||||
@LazyGroup(value = "toRelationLazyGroup")
|
||||
private LGMB_To toRelation;
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@Column(nullable = false)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* Default Constructor
|
||||
*/
|
||||
public LGMB_From() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public LGMB_From(String name) {
|
||||
super();
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the toRelation
|
||||
*/
|
||||
public LGMB_To getToRelation() {
|
||||
return toRelation;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param toRelation the toRelation to set
|
||||
*/
|
||||
public void setToRelation(LGMB_To toRelation) {
|
||||
this.toRelation = toRelation;
|
||||
}
|
||||
|
||||
public String getBigText() {
|
||||
return bigText;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return id
|
||||
*/
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param id
|
||||
*/
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,78 @@
|
|||
package org.hibernate.test.bytecode.enhancement.lazy.group;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.OneToOne;
|
||||
|
||||
import org.hibernate.annotations.AccessType;
|
||||
|
||||
/**
|
||||
* Target of a LazyToOne - relationship (Foreignkey on this side)
|
||||
*
|
||||
* @author Jan-Oliver Lustig, Sebastian Viefhaus
|
||||
*/
|
||||
@Entity
|
||||
public class LGMB_To {
|
||||
@Id
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@Column(nullable = false)
|
||||
@AccessType("property")
|
||||
private Long id;
|
||||
|
||||
@OneToOne
|
||||
LGMB_From fromRelation;
|
||||
|
||||
@Column(length = 50, nullable = false)
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* Default Constructor
|
||||
*/
|
||||
public LGMB_To() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public LGMB_To(String name) {
|
||||
super();
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the fromRelation
|
||||
*/
|
||||
public LGMB_From getFromRelation() {
|
||||
return fromRelation;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param fromRelation the fromRelation to set
|
||||
*/
|
||||
public void setFromRelation(LGMB_From fromRelation) {
|
||||
this.fromRelation = fromRelation;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return id
|
||||
*/
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param id
|
||||
*/
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
package org.hibernate.test.bytecode.enhancement.lazy.group;
|
||||
|
||||
import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.hibernate.stat.SessionStatistics;
|
||||
import org.hibernate.stat.Statistics;
|
||||
|
||||
import org.hibernate.testing.TestForIssue;
|
||||
import org.hibernate.testing.bytecode.enhancement.BytecodeEnhancerRunner;
|
||||
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
/**
|
||||
* Testing OneToOne LazyToOne association
|
||||
*
|
||||
* @author Jan-Oliver Lustig, Sebastian Viefhaus
|
||||
*/
|
||||
@TestForIssue(jiraKey = "HHH-11986")
|
||||
@RunWith(BytecodeEnhancerRunner.class)
|
||||
public class LazyGroupMappedByTest extends BaseCoreFunctionalTestCase {
|
||||
|
||||
public Class<?>[] getAnnotatedClasses() {
|
||||
return new Class[] { LGMB_From.class, LGMB_To.class };
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestForIssue(jiraKey = "HHH-11986")
|
||||
public void test() {
|
||||
Long fromId = createEntities();
|
||||
|
||||
Statistics stats = sessionFactory().getStatistics();
|
||||
stats.setStatisticsEnabled( true );
|
||||
stats.clear();
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
|
||||
SessionStatistics sessionStats = session.getStatistics();
|
||||
|
||||
// Should be loaded lazy.
|
||||
LGMB_From from = session.get( LGMB_From.class, fromId );
|
||||
assertEquals( 1, sessionStats.getEntityCount() );
|
||||
assertEquals( 1, stats.getPrepareStatementCount() );
|
||||
|
||||
// Lazy text is accessed, toRelation should not be read yet.
|
||||
String bigText = from.getBigText();
|
||||
assertEquals( 1, sessionStats.getEntityCount() );
|
||||
assertEquals( 2, stats.getPrepareStatementCount() );
|
||||
|
||||
// Second table is accessed and the lazy one should be reloaded.
|
||||
LGMB_To to = from.getToRelation();
|
||||
assertEquals( 2, sessionStats.getEntityCount() );
|
||||
assertEquals( 3, stats.getPrepareStatementCount() );
|
||||
|
||||
to.getFromRelation().getName();
|
||||
assertEquals( 3, stats.getPrepareStatementCount() );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Hilfsmethode: Eine Entität anlegen
|
||||
*
|
||||
* @return ID der Quell-Entität
|
||||
*/
|
||||
public Long createEntities() {
|
||||
return doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
session.createNativeQuery( "DELETE FROM LGMB_TO" ).executeUpdate();
|
||||
session.createNativeQuery( "DELETE FROM LGMB_FROM" ).executeUpdate();
|
||||
|
||||
LGMB_From from = new LGMB_From( "A" );
|
||||
LGMB_To to = new LGMB_To( "B" );
|
||||
from.setToRelation( to );
|
||||
to.setFromRelation( from );
|
||||
|
||||
session.save( from );
|
||||
session.flush();
|
||||
|
||||
return from.getId();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue