powered by simpleCommunicator - 2.0.19     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / NoRepositoryBean и MongoRepository
6 сообщений из 6, страница 1 из 1
NoRepositoryBean и MongoRepository
    #40134625
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите как правильно реализовать свой репозиторий

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
@Configuration
@EnableMongoRepositories(basePackages = "by.repository.mongo", repositoryBaseClass = BaseMongoRepository.class)
public class MongoConfig {}

@NoRepositoryBean
public interface BaseMongoRepository<T extends BaseDocument> extends MongoRepository<T, String> {

  void saveCascade(T document);

}

public interface LimitRepository extends BaseMongoRepository<LimitDocument>, QuerydslPredicateExecutor<LimitDocument> {}

public class LimitRepositoryImpl extends BaseMongoRepositoryImpl<LimitDocument> implements BaseMongoRepository<LimitDocument> {

  public LimitRepositoryImpl(MongoEntityInformation<LimitDocument, String> metadata, MongoOperations mongoOperations) {
    super(metadata, mongoOperations);
  }

  @Override
  public void saveCascade(LimitDocument document) {
    save(document);
  }



Возикает ошибка ввида

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
Description:

Parameter 0 of constructor in by.repository.mongo.LimitRepositoryImpl required a bean of type 'org.springframework.data.mongodb.repository.query.MongoEntityInformation' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.data.mongodb.repository.query.MongoEntityInformation' in your configuration.



Или как можно в кастомном методе saveCascade вызывать дефолтный метод save ???
...
Рейтинг: 0 / 0
NoRepositoryBean и MongoRepository
    #40134713
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел решение

Но не очень нравится, что сам в ручную создаю классы для Spring
Будут ли подводные камни в таком решении?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class LimitRepositoryImpl extends BaseMongoRepositoryImpl<LimitDocument> implements BaseMongoRepository<LimitDocument> {
...
  public LimitRepositoryImpl(MongoOperations mongoOperations) {
    super(getEntityInformationFor(LimitDocument.class, String.class), mongoOperations);
  }
...
  public static MongoEntityInformation getEntityInformationFor(Class clazz, Class idClazz) {
    TypeInformation typeInformation = ClassTypeInformation.from(clazz);
    MongoPersistentEntity mongoPersistentEntity = new BasicMongoPersistentEntity(typeInformation);
    return new MappingMongoEntityInformation(mongoPersistentEntity, idClazz);
  }
}
...
Рейтинг: 0 / 0
NoRepositoryBean и MongoRepository
    #40134739
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,
Подводные камни это архитектура.
Для вопросов по ней, когда все работает, но неудобно - описывают задачу в целом. Выше рангом простого кода.
...
Рейтинг: 0 / 0
NoRepositoryBean и MongoRepository
    #40134748
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

Суть в том что монго не поддерживает связи между таблицами

Погулив доки меня заинтересовала данная связь (когда Child ссылает на Parent)
https://docs.mongodb.com/manual/tutorial/model-embedded-one-to-many-relationships-between-documents/

Попробовал создать такую логику на сервисах - работет
Решил перенести нс уровень ниже - репозитории

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class LimitRepositoryImpl extends SimpleMongoRepository<LimitDocument, String> implements
    CascadeMongoRepository<LimitDocument> {

  private final RangeRepository rangeRepository;

  public LimitRepositoryImpl(MongoOperations mongoOperations, RangeRepository rangeRepository) {
    super(getEntityInformationFor(LimitDocument.class, String.class), mongoOperations); - вот этот hotfix работает, но хотелось б через инъекцию MongoPersistentEntity (а не самому писать создание объектов)
    this.rangeRepository = rangeRepository;
  }

  @Override
  public void saveCascade(LimitDocument document) {
    save(document);
    rangeRepository.saveAllCascade(document.getId(), document.getRanges());
  }
}



При сохранении главного документа, я сохраняю его , получаю его ID
И далее сохраняю потомков с Parent ID

Проблема появилась при попытке вызова - save(document);
Тогда и было принято решение наследоваться от SimpleMongoRepository

Далее ловлю эту ошибку
Parameter 0 of constructor in by.repository.mongo.LimitRepositoryImpl required a bean of type 'org.springframework.data.mongodb.repository.query.MongoEntityInformation' that could not be found.
...
Рейтинг: 0 / 0
NoRepositoryBean и MongoRepository
    #40134785
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-

Но не очень нравится, что сам в ручную создаю классы для Spring

Это просто прекрасно. Тоесть мы дожили до того что разработчику стыдно использовать ООП.

Я думаю что ты всегда вправе создать столько наследований сколько тебе надо для решения
задачи.

По поводу Mongo. Чтоб ты не полез в дебри. Какой ты читал tutorial?

Есть хрестоматийные примеры по SpringData https://github.com/spring-projects/spring-data-book/tree/master/mongodb
посмотри как там.
...
Рейтинг: 0 / 0
NoRepositoryBean и MongoRepository
    #40134822
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,
Ну дак монго это бд где из ACID транзакции есть только первая буква А)))))
Другие реляционные могут поддерживать согласованное состояние.
А тут только ВСЕ запихать в ОДИН документ
)))))
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / NoRepositoryBean и MongoRepository
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]