diff --git a/fine-hibernate/src/com/fr/third/org/hibernate/tuple/PojoInstantiator.java b/fine-hibernate/src/com/fr/third/org/hibernate/tuple/PojoInstantiator.java index 8fbd1780b..ac3f255f4 100755 --- a/fine-hibernate/src/com/fr/third/org/hibernate/tuple/PojoInstantiator.java +++ b/fine-hibernate/src/com/fr/third/org/hibernate/tuple/PojoInstantiator.java @@ -17,6 +17,7 @@ import com.fr.third.org.hibernate.internal.CoreLogging; import com.fr.third.org.hibernate.internal.CoreMessageLogger; import com.fr.third.org.hibernate.internal.util.ReflectHelper; import com.fr.third.org.hibernate.mapping.Component; +import com.fr.third.org.hibernate.tuple.entity.DefaultEntityRegister; /** * Defines a POJO-based instantiator for use from the tuplizers. @@ -72,7 +73,11 @@ public class PojoInstantiator implements Instantiator, Serializable { public Object instantiate() { if ( isAbstract ) { - throw new InstantiationException( "Cannot instantiate abstract class or interface: ", mappedClass ); + try { + return DefaultEntityRegister.getInstance().getDefaultEntityClass().newInstance(); + } catch (Exception e) { + throw new InstantiationException("class not found: ", mappedClass); + } } else if ( optimizer != null ) { return optimizer.newInstance(); diff --git a/fine-hibernate/src/com/fr/third/org/hibernate/tuple/entity/DefaultEntityRegister.java b/fine-hibernate/src/com/fr/third/org/hibernate/tuple/entity/DefaultEntityRegister.java new file mode 100644 index 000000000..fe3932ea7 --- /dev/null +++ b/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; + } +}