Browse Source

fix

research/11.0
zed 6 years ago
parent
commit
d78f153f0e
  1. 143
      fine-hibernate/src/com/fr/third/org/hibernate/tuple/PojoInstantiator.java
  2. 41
      fine-hibernate/src/com/fr/third/org/hibernate/tuple/entity/DefaultEntityRegister.java

143
fine-hibernate/src/com/fr/third/org/hibernate/tuple/PojoInstantiator.java

@ -6,10 +6,6 @@
*/ */
package com.fr.third.org.hibernate.tuple; package com.fr.third.org.hibernate.tuple;
import java.io.IOException;
import java.io.Serializable;
import java.lang.reflect.Constructor;
import com.fr.third.org.hibernate.InstantiationException; import com.fr.third.org.hibernate.InstantiationException;
import com.fr.third.org.hibernate.PropertyNotFoundException; import com.fr.third.org.hibernate.PropertyNotFoundException;
import com.fr.third.org.hibernate.bytecode.spi.ReflectionOptimizer; import com.fr.third.org.hibernate.bytecode.spi.ReflectionOptimizer;
@ -17,95 +13,94 @@ import com.fr.third.org.hibernate.internal.CoreLogging;
import com.fr.third.org.hibernate.internal.CoreMessageLogger; import com.fr.third.org.hibernate.internal.CoreMessageLogger;
import com.fr.third.org.hibernate.internal.util.ReflectHelper; import com.fr.third.org.hibernate.internal.util.ReflectHelper;
import com.fr.third.org.hibernate.mapping.Component; import com.fr.third.org.hibernate.mapping.Component;
import com.fr.third.org.hibernate.tuple.entity.DefaultEntityRegister;
import java.io.IOException;
import java.io.Serializable;
import java.lang.reflect.Constructor;
/** /**
* Defines a POJO-based instantiator for use from the tuplizers. * Defines a POJO-based instantiator for use from the tuplizers.
*/ */
public class PojoInstantiator implements Instantiator, Serializable { public class PojoInstantiator implements Instantiator, Serializable {
private static final CoreMessageLogger LOG = CoreLogging.messageLogger( PojoInstantiator.class.getName() ); private static final CoreMessageLogger LOG = CoreLogging.messageLogger(PojoInstantiator.class.getName());
private transient Constructor constructor; private transient Constructor constructor;
private final Class mappedClass; private final Class mappedClass;
private final transient ReflectionOptimizer.InstantiationOptimizer optimizer; private final transient ReflectionOptimizer.InstantiationOptimizer optimizer;
private final boolean embeddedIdentifier; private final boolean embeddedIdentifier;
private final boolean isAbstract; private final boolean isAbstract;
public PojoInstantiator( public PojoInstantiator(
Class mappedClass, Class mappedClass,
ReflectionOptimizer.InstantiationOptimizer optimizer, ReflectionOptimizer.InstantiationOptimizer optimizer,
boolean embeddedIdentifier) { boolean embeddedIdentifier) {
this.mappedClass = mappedClass; this.mappedClass = mappedClass;
this.optimizer = optimizer; this.optimizer = optimizer;
this.embeddedIdentifier = embeddedIdentifier; this.embeddedIdentifier = embeddedIdentifier;
this.isAbstract = ReflectHelper.isAbstractClass( mappedClass ); this.isAbstract = ReflectHelper.isAbstractClass(mappedClass);
try { try {
constructor = ReflectHelper.getDefaultConstructor(mappedClass); constructor = ReflectHelper.getDefaultConstructor(mappedClass);
} } catch (PropertyNotFoundException pnfe) {
catch ( PropertyNotFoundException pnfe ) { LOG.noDefaultConstructor(mappedClass.getName());
LOG.noDefaultConstructor( mappedClass.getName() ); constructor = null;
constructor = null; }
} }
}
public PojoInstantiator(Component component, ReflectionOptimizer.InstantiationOptimizer optimizer) { public PojoInstantiator(Component component, ReflectionOptimizer.InstantiationOptimizer optimizer) {
this.mappedClass = component.getComponentClass(); this.mappedClass = component.getComponentClass();
this.isAbstract = ReflectHelper.isAbstractClass( mappedClass ); this.isAbstract = ReflectHelper.isAbstractClass(mappedClass);
this.optimizer = optimizer; this.optimizer = optimizer;
this.embeddedIdentifier = false; this.embeddedIdentifier = false;
try { try {
constructor = ReflectHelper.getDefaultConstructor(mappedClass); constructor = ReflectHelper.getDefaultConstructor(mappedClass);
} } catch (PropertyNotFoundException pnfe) {
catch ( PropertyNotFoundException pnfe ) { LOG.noDefaultConstructor(mappedClass.getName());
LOG.noDefaultConstructor(mappedClass.getName()); constructor = null;
constructor = null; }
} }
}
private void readObject(java.io.ObjectInputStream stream) throws ClassNotFoundException, IOException { private void readObject(java.io.ObjectInputStream stream) throws ClassNotFoundException, IOException {
stream.defaultReadObject(); stream.defaultReadObject();
constructor = ReflectHelper.getDefaultConstructor( mappedClass ); constructor = ReflectHelper.getDefaultConstructor(mappedClass);
} }
public Object instantiate() { public Object instantiate() {
if ( isAbstract ) { if (isAbstract) {
try { try {
return Class.forName("com.fr.schedule.base.entity.output.DefaultOutputEntity").newInstance(); return DefaultEntityRegister.getInstance().getDefaultEntityClass().newInstance();
} catch (Exception e) { } catch (Exception e) {
throw new InstantiationException("class not found: ", mappedClass); throw new InstantiationException("class not found: ", mappedClass);
} }
} } else if (optimizer != null) {
else if ( optimizer != null ) { return optimizer.newInstance();
return optimizer.newInstance(); } else if (constructor == null) {
} throw new InstantiationException("No default constructor for entity: ", mappedClass);
else if ( constructor == null ) { } else {
throw new InstantiationException( "No default constructor for entity: ", mappedClass ); try {
} return applyInterception(constructor.newInstance((Object[]) null));
else { } catch (Exception e) {
try { throw new InstantiationException("Could not instantiate entity: ", mappedClass, e);
return applyInterception( constructor.newInstance( (Object[]) null ) ); }
} }
catch ( Exception e ) { }
throw new InstantiationException( "Could not instantiate entity: ", mappedClass, e );
}
}
}
protected Object applyInterception(Object entity) { protected Object applyInterception(Object entity) {
return entity; return entity;
} }
public Object instantiate(Serializable id) { public Object instantiate(Serializable id) {
final boolean useEmbeddedIdentifierInstanceAsEntity = embeddedIdentifier && final boolean useEmbeddedIdentifierInstanceAsEntity = embeddedIdentifier &&
id != null && id != null &&
id.getClass().equals(mappedClass); id.getClass().equals(mappedClass);
return useEmbeddedIdentifierInstanceAsEntity ? id : instantiate(); return useEmbeddedIdentifierInstanceAsEntity ? id : instantiate();
} }
public boolean isInstance(Object object) { public boolean isInstance(Object object) {
return mappedClass.isInstance( object ); return mappedClass.isInstance(object);
} }
} }

41
fine-hibernate/src/com/fr/third/org/hibernate/tuple/entity/DefaultEntityRegister.java

@ -0,0 +1,41 @@
package com.fr.third.org.hibernate.tuple.entity;
/**
* Created by Zed on 2018/11/1.
*/
public class DefaultEntityRegister {
private static volatile DefaultEntityRegister instance;
private Class defaultEntityClass = null;
public static DefaultEntityRegister getInstance() {
if (instance == null) {
synchronized (DefaultEntityRegister.class) {
if (instance == null) {
instance = new DefaultEntityRegister();
}
}
}
return instance;
}
private DefaultEntityRegister() {
}
public void registerDefaultClass(Class defaultEntityClass) {
this.defaultEntityClass = defaultEntityClass;
}
public void resetDefaultClass() {
this.defaultEntityClass = null;
}
public Class getDefaultEntityClass() {
return defaultEntityClass;
}
public void setDefaultEntityClass(Class defaultEntityClass) {
this.defaultEntityClass = defaultEntityClass;
}
}
Loading…
Cancel
Save