diff --git a/spring-jdbc/src/main/resources/org/springframework/jdbc/support/sql-error-codes.xml b/spring-jdbc/src/main/resources/org/springframework/jdbc/support/sql-error-codes.xml
index d2e587967c1..2bb0e58b654 100644
--- a/spring-jdbc/src/main/resources/org/springframework/jdbc/support/sql-error-codes.xml
+++ b/spring-jdbc/src/main/resources/org/springframework/jdbc/support/sql-error-codes.xml
@@ -172,7 +172,7 @@
2601,2627
- 544,8114,8115
+ 544,2628,8114,8115
4060
diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/SpringBeanContainer.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/SpringBeanContainer.java
index 912ebf544ab..4fc8a4a0630 100644
--- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/SpringBeanContainer.java
+++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/SpringBeanContainer.java
@@ -180,14 +180,23 @@ public final class SpringBeanContainer implements BeanContainer {
try {
if (lifecycleOptions.useJpaCompliantCreation()) {
- Object bean = this.beanFactory.autowire(beanType, AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, false);
- this.beanFactory.autowireBeanProperties(bean, AutowireCapableBeanFactory.AUTOWIRE_NO, false);
- this.beanFactory.applyBeanPropertyValues(bean, name);
- bean = this.beanFactory.initializeBean(bean, name);
- return new SpringContainedBean<>(bean, beanInstance -> this.beanFactory.destroyBean(name, beanInstance));
+ if (this.beanFactory.containsBean(name)) {
+ Object bean = this.beanFactory.autowire(beanType, AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, false);
+ this.beanFactory.autowireBeanProperties(bean, AutowireCapableBeanFactory.AUTOWIRE_NO, false);
+ this.beanFactory.applyBeanPropertyValues(bean, name);
+ bean = this.beanFactory.initializeBean(bean, name);
+ return new SpringContainedBean<>(bean, beanInstance -> this.beanFactory.destroyBean(name, beanInstance));
+ }
+ else {
+ return new SpringContainedBean<>(
+ this.beanFactory.createBean(beanType),
+ this.beanFactory::destroyBean);
+ }
}
else {
- return new SpringContainedBean<>(this.beanFactory.getBean(name, beanType));
+ return (this.beanFactory.containsBean(name) ?
+ new SpringContainedBean<>(this.beanFactory.getBean(name, beanType)) :
+ new SpringContainedBean<>(this.beanFactory.getBean(beanType)));
}
}
catch (BeansException ex) {