2016-10-27 4 views
4

Я пытаюсь использовать spring-data-jpa и spring-data-mongodb. В развертывании, некоторые из моих хранилищ разворачивать, пока один (случайный один каждый раз) не удается развернуть с ошибкойНазвание бина неоднозначно совпадает с одним и тем же бобом

Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001414: Bean name is ambiguous. Name za.co.knonchalant.dead.dao.repositories.UserRepository resolves to beans: 
    - CdiRepositoryBean: type='za.co.knonchalant.dead.dao.repositories.UserRepository', qualifiers=[@javax.enterprise.inject.Default(), @javax.enterprise.inject.Any()], 
    - CdiRepositoryBean: type='za.co.knonchalant.dead.dao.repositories.UserRepository', qualifiers=[@javax.enterprise.inject.Default(), @javax.enterprise.inject.Any()]"}} 

Это, кажется, соответствие один и тот же интерфейс, дважды - любое представление о том, что может происходить?

Интерфейс UserRepository является

public interface UserRepository extends LocationRepository<User> { } 

LocationRepository И это общий корень интерфейс для местоположений, который выглядит как

@NoRepositoryBean 
public interface LocationRepository<T> extends JpaRepository<T, String> { 
    List<T> findByPositionWithin(Circle c); 

    List<T> findByPositionNear(Point p, Distance distance); 

    List<T> findByPositionWithin(Box b); 
} 

Моя конфигурация, которую я не слишком уверен в, является

@Configuration 
@EnableJpaRepositories 
public class CdiConfig { 
    @Produces 
    @Dependent 
    @PersistenceContext(unitName = "mongo-ogm") 
    public EntityManager entityManager; 

    public 
    @Bean 
    Mongo mongo() throws Exception { 
     return new Mongo("localhost"); 
    } 

    @Produces 
    public @Bean MongoTemplate mongoTemplate() throws Exception { 
     return new MongoTemplate(mongo(), "mydatabase"); 
    } 
} 

Наряду с persistence.xml в соответствии со следующим - это правильный провайдер?

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="mongo-ogm" transaction-type="JTA"> 
     <provider>org.hibernate.ogm.jpa.HibernateOgmPersistence</provider> 
     <exclude-unlisted-classes>false</exclude-unlisted-classes> 
     <properties> 
      <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform"/> 
      <property name="hibernate.ogm.datastore.database" value="database"/> 
      <property name="hibernate.ogm.datastore.host" value="localhost"/> 
      <property name="hibernate.ogm.datastore.provider" value="MONGODB"/> 
      <property name="hibernate.ogm.datastore.create_database" value="true"/> 
     </properties> 
    </persistence-unit> 
</persistence> 
+0

Возможно, это будет хорошая идея, если бы вы могли включить код для своего UserRepository. – megalucio

+0

Вы используете 'spring-data-jpa' и' spring-data-mongodb' ?. возможно, 'spring-data-jpa' генерирует' Jpa Repository Bean' и 'spring-data-mongodb'' MonogRepository' Bean ?. Не могли бы вы добавить свою конфигурацию? – Pau

+0

Я - я добавлю конфигурацию, как только приблизится к коду, мне понадобится обе эти библиотеки в этом случае, не так ли? –

ответ

2

Я полагаю, обе библиотеки имеют те же бобы, так что вам нужно добавить предоставленную сферу в вашем Maven pom.xml для одного из этих библиотек. Похоже, что Spring находит один и тот же компонент в нескольких местах.

+0

Этот компонент является одним из моих собственных, поэтому он существует только в моем слое данных (который включен только один раз) –

Смежные вопросы