HHH-4870 - Cannot determine java-type from given member [null]
git-svn-id: https://svn.jboss.org/repos/hibernate/core/trunk@19141 1b8cb986-b30d-0410-93ca-fae66ebed9b2
This commit is contained in:
parent
54d496295e
commit
bec1835baf
|
@ -57,6 +57,7 @@ import org.hibernate.mapping.Join;
|
||||||
import org.hibernate.mapping.PersistentClass;
|
import org.hibernate.mapping.PersistentClass;
|
||||||
import org.hibernate.mapping.Property;
|
import org.hibernate.mapping.Property;
|
||||||
import org.hibernate.mapping.SimpleValue;
|
import org.hibernate.mapping.SimpleValue;
|
||||||
|
import org.hibernate.mapping.SyntheticProperty;
|
||||||
import org.hibernate.mapping.Table;
|
import org.hibernate.mapping.Table;
|
||||||
import org.hibernate.mapping.ToOne;
|
import org.hibernate.mapping.ToOne;
|
||||||
import org.hibernate.mapping.Value;
|
import org.hibernate.mapping.Value;
|
||||||
|
@ -156,9 +157,10 @@ public class BinderHelper {
|
||||||
clone.setInsertable( false );
|
clone.setInsertable( false );
|
||||||
clone.setUpdateable( false );
|
clone.setUpdateable( false );
|
||||||
clone.setNaturalIdentifier( false );
|
clone.setNaturalIdentifier( false );
|
||||||
|
clone.setGeneration( property.getGeneration() );
|
||||||
embeddedComp.addProperty( clone );
|
embeddedComp.addProperty( clone );
|
||||||
}
|
}
|
||||||
synthProp = new Property();
|
synthProp = new SyntheticProperty();
|
||||||
synthProp.setName( syntheticPropertyName );
|
synthProp.setName( syntheticPropertyName );
|
||||||
synthProp.setNodeName( syntheticPropertyName );
|
synthProp.setNodeName( syntheticPropertyName );
|
||||||
synthProp.setPersistentClass( ownerEntity );
|
synthProp.setPersistentClass( ownerEntity );
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, 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.mapping;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Models a property which does not actually exist in the model. It is created by Hibernate during
|
||||||
|
* the metamodel binding process.
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
public class SyntheticProperty extends Property {
|
||||||
|
@Override
|
||||||
|
public boolean isSynthetic() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,10 +1,10 @@
|
||||||
/*
|
/*
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
|
* Copyright (c) 2010, Red Hat Inc. or third-party contributors as
|
||||||
* indicated by the @author tags or express copyright attribution
|
* indicated by the @author tags or express copyright attribution
|
||||||
* statements applied by the authors. All third-party contributions are
|
* statements applied by the authors. All third-party contributions are
|
||||||
* distributed under license by Red Hat Middleware LLC.
|
* distributed under license by Red Hat Inc.
|
||||||
*
|
*
|
||||||
* This copyrighted material is made available to anyone wishing to use, modify,
|
* 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
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
@ -20,7 +20,6 @@
|
||||||
* Free Software Foundation, Inc.
|
* Free Software Foundation, Inc.
|
||||||
* 51 Franklin Street, Fifth Floor
|
* 51 Franklin Street, Fifth Floor
|
||||||
* Boston, MA 02110-1301 USA
|
* Boston, MA 02110-1301 USA
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
package org.hibernate.mapping;
|
package org.hibernate.mapping;
|
||||||
|
|
||||||
|
@ -33,13 +32,25 @@ import org.hibernate.property.PropertyAccessor;
|
||||||
public class Backref extends Property {
|
public class Backref extends Property {
|
||||||
private String collectionRole;
|
private String collectionRole;
|
||||||
private String entityName;
|
private String entityName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
public boolean isBackRef() {
|
public boolean isBackRef() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public boolean isSynthetic() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public String getCollectionRole() {
|
public String getCollectionRole() {
|
||||||
return collectionRole;
|
return collectionRole;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCollectionRole(String collectionRole) {
|
public void setCollectionRole(String collectionRole) {
|
||||||
this.collectionRole = collectionRole;
|
this.collectionRole = collectionRole;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
/*
|
/*
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
|
* Copyright (c) 2010, Red Hat Inc. or third-party contributors as
|
||||||
* indicated by the @author tags or express copyright attribution
|
* indicated by the @author tags or express copyright attribution
|
||||||
* statements applied by the authors. All third-party contributions are
|
* statements applied by the authors. All third-party contributions are
|
||||||
* distributed under license by Red Hat Middleware LLC.
|
* distributed under license by Red Hat Inc.
|
||||||
*
|
*
|
||||||
* This copyrighted material is made available to anyone wishing to use, modify,
|
* 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
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
@ -20,7 +20,6 @@
|
||||||
* Free Software Foundation, Inc.
|
* Free Software Foundation, Inc.
|
||||||
* 51 Franklin Street, Fifth Floor
|
* 51 Franklin Street, Fifth Floor
|
||||||
* Boston, MA 02110-1301 USA
|
* Boston, MA 02110-1301 USA
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
package org.hibernate.mapping;
|
package org.hibernate.mapping;
|
||||||
|
|
||||||
|
@ -37,9 +36,18 @@ public class IndexBackref extends Property {
|
||||||
public boolean isBackRef() {
|
public boolean isBackRef() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public boolean isSynthetic() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public String getCollectionRole() {
|
public String getCollectionRole() {
|
||||||
return collectionRole;
|
return collectionRole;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCollectionRole(String collectionRole) {
|
public void setCollectionRole(String collectionRole) {
|
||||||
this.collectionRole = collectionRole;
|
this.collectionRole = collectionRole;
|
||||||
}
|
}
|
||||||
|
@ -55,6 +63,7 @@ public class IndexBackref extends Property {
|
||||||
public String getEntityName() {
|
public String getEntityName() {
|
||||||
return entityName;
|
return entityName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setEntityName(String entityName) {
|
public void setEntityName(String entityName) {
|
||||||
this.entityName = entityName;
|
this.entityName = entityName;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
/*
|
/*
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
|
* Copyright (c) 2010, Red Hat Inc. or third-party contributors as
|
||||||
* indicated by the @author tags or express copyright attribution
|
* indicated by the @author tags or express copyright attribution
|
||||||
* statements applied by the authors. All third-party contributions are
|
* statements applied by the authors. All third-party contributions are
|
||||||
* distributed under license by Red Hat Middleware LLC.
|
* distributed under license by Red Hat Inc.
|
||||||
*
|
*
|
||||||
* This copyrighted material is made available to anyone wishing to use, modify,
|
* 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
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
@ -20,7 +20,6 @@
|
||||||
* Free Software Foundation, Inc.
|
* Free Software Foundation, Inc.
|
||||||
* 51 Franklin Street, Fifth Floor
|
* 51 Franklin Street, Fifth Floor
|
||||||
* Boston, MA 02110-1301 USA
|
* Boston, MA 02110-1301 USA
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
package org.hibernate.mapping;
|
package org.hibernate.mapping;
|
||||||
|
|
||||||
|
@ -63,11 +62,22 @@ public class Property implements Serializable, MetaAttributable {
|
||||||
private java.util.Map metaAttributes;
|
private java.util.Map metaAttributes;
|
||||||
private PersistentClass persistentClass;
|
private PersistentClass persistentClass;
|
||||||
private boolean naturalIdentifier;
|
private boolean naturalIdentifier;
|
||||||
|
|
||||||
public boolean isBackRef() {
|
public boolean isBackRef() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Does this property represent a synthetic property? A synthetic property is one we create during
|
||||||
|
* metamodel binding to represent a collection of columns but which does not represent a property
|
||||||
|
* physically available on the entity.
|
||||||
|
*
|
||||||
|
* @return True if synthetic; false otherwise.
|
||||||
|
*/
|
||||||
|
public boolean isSynthetic() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public Type getType() throws MappingException {
|
public Type getType() throws MappingException {
|
||||||
return value.getType();
|
return value.getType();
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,9 +83,9 @@ public class AttributeFactory {
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings({ "unchecked" })
|
@SuppressWarnings({ "unchecked" })
|
||||||
public <X, Y> AttributeImplementor<X, Y> buildAttribute(AbstractManagedType<X> ownerType, Property property) {
|
public <X, Y> AttributeImplementor<X, Y> buildAttribute(AbstractManagedType<X> ownerType, Property property) {
|
||||||
if ( isVirtual( property, ownerType ) ) {
|
if ( property.isSynthetic() ) {
|
||||||
// hide virtual properties (fabricated by Hibernate) from the JPA metamodel.
|
// hide synthetic/virtual properties (fabricated by Hibernate) from the JPA metamodel.
|
||||||
log.trace( "Skipping virtual property {}({})", ownerType.getJavaType().getName(), property.getName() );
|
log.trace( "Skipping synthetic property {}({})", ownerType.getJavaType().getName(), property.getName() );
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
log.trace( "Building attribute [{}.{}]", ownerType.getJavaType().getName(), property.getName() );
|
log.trace( "Building attribute [{}.{}]", ownerType.getJavaType().getName(), property.getName() );
|
||||||
|
@ -114,12 +114,6 @@ public class AttributeFactory {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private <X> boolean isVirtual(Property property, AbstractManagedType<X> ownerType) {
|
|
||||||
// back-refs and embedded components are considered virtual
|
|
||||||
return property.isBackRef()
|
|
||||||
|| ( property.isComposite() && ( (Component) property.getValue() ).isEmbedded() );
|
|
||||||
}
|
|
||||||
|
|
||||||
private <X> AttributeContext<X> wrap(final AbstractManagedType<X> ownerType, final Property property) {
|
private <X> AttributeContext<X> wrap(final AbstractManagedType<X> ownerType, final Property property) {
|
||||||
return new AttributeContext<X>() {
|
return new AttributeContext<X>() {
|
||||||
public AbstractManagedType<X> getOwnerType() {
|
public AbstractManagedType<X> getOwnerType() {
|
||||||
|
|
Loading…
Reference in New Issue