From 74e1021b22edc8ad1e1a9640613b41c5bb5c4260 Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Thu, 1 Aug 2019 18:10:36 +0200 Subject: [PATCH] DATACMNS-1580 - Fix EntityManagerFactory lookup in BeanDefinitionUtils. We now use a set to collect all the EntityManagerBeanDefinitions returned from the application context. Spring Framework recently changed the bean names by type lookup behavior to also consider the return type of a factory bean so that we now see Spring defined EntityManagerFactory beans twice as we look them up via the EMF interface as well as via AbstractEntityManagerFactoryBean. Using a set as the target unifies them into one logical bean definition again. --- .../springframework/data/jpa/util/BeanDefinitionUtils.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/springframework/data/jpa/util/BeanDefinitionUtils.java b/src/main/java/org/springframework/data/jpa/util/BeanDefinitionUtils.java index 79bb6caa7..fb89c3f73 100644 --- a/src/main/java/org/springframework/data/jpa/util/BeanDefinitionUtils.java +++ b/src/main/java/org/springframework/data/jpa/util/BeanDefinitionUtils.java @@ -18,6 +18,8 @@ package org.springframework.data.jpa.util; import static java.util.Arrays.*; import static org.springframework.beans.factory.BeanFactoryUtils.*; +import lombok.EqualsAndHashCode; + import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -93,7 +95,7 @@ public class BeanDefinitionUtils { public static Collection getEntityManagerFactoryBeanDefinitions( ConfigurableListableBeanFactory beanFactory) { - List definitions = new ArrayList(); + Set definitions = new HashSet(); for (Class type : EMF_TYPES) { @@ -120,7 +122,7 @@ public class BeanDefinitionUtils { * @param definitions */ private static void registerEntityManagerFactoryBeanDefinition(String name, - ConfigurableListableBeanFactory beanFactory, List definitions) { + ConfigurableListableBeanFactory beanFactory, Collection definitions) { BeanDefinition definition = beanFactory.getBeanDefinition(name); @@ -168,6 +170,7 @@ public class BeanDefinitionUtils { * @author Oliver Gierke * @author Thomas Darimont */ + @EqualsAndHashCode public static class EntityManagerFactoryBeanDefinition { private final String beanName;