HHH-8660 - NamedEntityGraphDefinition built too early
This commit is contained in:
parent
4e527d0f3e
commit
52d095be97
|
@ -164,25 +164,6 @@ public class EntityBinder {
|
|||
this.annotatedClass = annotatedClass;
|
||||
bindEjb3Annotation( ejb3Ann );
|
||||
bindHibernateAnnotation( hibAnn );
|
||||
|
||||
processNamedEntityGraphs();
|
||||
}
|
||||
|
||||
private void processNamedEntityGraphs() {
|
||||
processNamedEntityGraph( annotatedClass.getAnnotation( NamedEntityGraph.class ) );
|
||||
final NamedEntityGraphs graphs = annotatedClass.getAnnotation( NamedEntityGraphs.class );
|
||||
if ( graphs != null ) {
|
||||
for ( NamedEntityGraph graph : graphs.value() ) {
|
||||
processNamedEntityGraph( graph );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void processNamedEntityGraph(NamedEntityGraph annotation) {
|
||||
if ( annotation == null ) {
|
||||
return;
|
||||
}
|
||||
mappings.addNamedEntityGraphDefintion( new NamedEntityGraphDefinition( annotation, name, persistentClass.getEntityName() ) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -425,6 +406,25 @@ public class EntityBinder {
|
|||
catch (MappingException me) {
|
||||
throw new AnnotationException( "Use of the same entity name twice: " + name, me );
|
||||
}
|
||||
|
||||
processNamedEntityGraphs();
|
||||
}
|
||||
|
||||
private void processNamedEntityGraphs() {
|
||||
processNamedEntityGraph( annotatedClass.getAnnotation( NamedEntityGraph.class ) );
|
||||
final NamedEntityGraphs graphs = annotatedClass.getAnnotation( NamedEntityGraphs.class );
|
||||
if ( graphs != null ) {
|
||||
for ( NamedEntityGraph graph : graphs.value() ) {
|
||||
processNamedEntityGraph( graph );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void processNamedEntityGraph(NamedEntityGraph annotation) {
|
||||
if ( annotation == null ) {
|
||||
return;
|
||||
}
|
||||
mappings.addNamedEntityGraphDefintion( new NamedEntityGraphDefinition( annotation, name, persistentClass.getEntityName() ) );
|
||||
}
|
||||
|
||||
public void bindDiscriminatorValue() {
|
||||
|
|
|
@ -42,7 +42,12 @@ public class NamedEntityGraphDefinition {
|
|||
this.annotation = annotation;
|
||||
this.jpaEntityName = jpaEntityName;
|
||||
this.entityName = entityName;
|
||||
this.name = StringHelper.isEmpty( annotation.name() ) ? jpaEntityName : annotation.name();
|
||||
this.name = StringHelper.isNotEmpty( annotation.name() )
|
||||
? annotation.name()
|
||||
: jpaEntityName;
|
||||
if ( name == null ) {
|
||||
throw new IllegalArgumentException( "Named entity graph name cannot be null" );
|
||||
}
|
||||
}
|
||||
|
||||
public String getRegisteredName() {
|
||||
|
|
|
@ -233,7 +233,20 @@ public class EntityManagerFactoryImpl implements HibernateEntityManagerFactory {
|
|||
@SuppressWarnings("unchecked")
|
||||
private void applyNamedEntityGraphs(Collection<NamedEntityGraphDefinition> namedEntityGraphs) {
|
||||
for ( NamedEntityGraphDefinition definition : namedEntityGraphs ) {
|
||||
final EntityType entityType = metamodel.getEntityTypeByName( definition.getJpaEntityName() );
|
||||
log.debugf(
|
||||
"Applying named entity graph [name=%s, entity-name=%s, jpa-entity-name=%s",
|
||||
definition.getRegisteredName(),
|
||||
definition.getEntityName(),
|
||||
definition.getJpaEntityName()
|
||||
);
|
||||
final EntityType entityType = metamodel.getEntityTypeByName( definition.getEntityName() );
|
||||
if ( entityType == null ) {
|
||||
throw new IllegalArgumentException(
|
||||
"Attempted to register named entity graph [" + definition.getRegisteredName()
|
||||
+ "] for unknown entity ["+ definition.getEntityName() + "]"
|
||||
|
||||
);
|
||||
}
|
||||
final EntityGraphImpl entityGraph = new EntityGraphImpl(
|
||||
definition.getRegisteredName(),
|
||||
entityType,
|
||||
|
|
|
@ -30,7 +30,7 @@ import javax.persistence.NamedEntityGraph;
|
|||
/**
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
@Entity(name = "Person")
|
||||
@Entity
|
||||
@NamedEntityGraph
|
||||
public class Person {
|
||||
@Id
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* Copyright (c) 2013, Red Hat Inc. or third-party contributors as
|
||||
* indicated by the @author tags or express copyright attribution
|
||||
* statements applied by the authors. All third-party contributions are
|
||||
* distributed under license by Red Hat Inc.
|
||||
*
|
||||
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||
* Lesser General Public License, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this distribution; if not, write to:
|
||||
* Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor
|
||||
* Boston, MA 02110-1301 USA
|
||||
*/
|
||||
package org.hibernate.jpa.test.graphs.named.multiple;
|
||||
|
||||
import javax.persistence.EntityGraph;
|
||||
|
||||
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static junit.framework.Assert.assertNotNull;
|
||||
|
||||
/**
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
public class NamedEntityGraphsTest extends BaseEntityManagerFunctionalTestCase {
|
||||
@Override
|
||||
protected Class<?>[] getAnnotatedClasses() {
|
||||
return new Class[] { Person.class };
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIt() {
|
||||
EntityGraph graph = getOrCreateEntityManager().getEntityGraph( "abc" );
|
||||
assertNotNull( graph );
|
||||
graph = getOrCreateEntityManager().getEntityGraph( "xyz" );
|
||||
assertNotNull( graph );
|
||||
}
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* Copyright (c) 2013, Red Hat Inc. or third-party contributors as
|
||||
* indicated by the @author tags or express copyright attribution
|
||||
* statements applied by the authors. All third-party contributions are
|
||||
* distributed under license by Red Hat Inc.
|
||||
*
|
||||
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||
* Lesser General Public License, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this distribution; if not, write to:
|
||||
* Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor
|
||||
* Boston, MA 02110-1301 USA
|
||||
*/
|
||||
package org.hibernate.jpa.test.graphs.named.multiple;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.NamedEntityGraph;
|
||||
import javax.persistence.NamedEntityGraphs;
|
||||
|
||||
/**
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
@Entity(name = "Person")
|
||||
@NamedEntityGraphs({
|
||||
@NamedEntityGraph( name = "abc" ),
|
||||
@NamedEntityGraph( name = "xyz" )
|
||||
})
|
||||
public class Person {
|
||||
@Id
|
||||
public Long id;
|
||||
}
|
Loading…
Reference in New Issue