, P extends PersistentProperty> T createInstance(E entity,
ParameterValueProvider
provider) {
- PreferredConstructor extends T, P> preferredConstructor = entity.getPersistenceConstructor();
+ Object[] params = extractInvocationArguments(entity.getPersistenceConstructor(), provider);
+
+ try {
+ return (T) instantiator.newInstance(params);
+ } catch (Exception e) {
+ throw new MappingInstantiationException(entity, Arrays.asList(params), e);
+ }
+ }
+
+ private
, T> Object[] extractInvocationArguments(
+ @Nullable PreferredConstructor extends T, P> preferredConstructor, ParameterValueProvider
provider) {
if (preferredConstructor == null) {
throw new IllegalArgumentException("PreferredConstructor must not be null!");
@@ -217,15 +229,19 @@ public , P extends PersistentPrope
int slot = i / 32;
int offset = slot * 32;
- Object param = provider.getParameterValue(parameters.get(i));
+ Parameter