Как создать общие объекты для СУБД и MongoDB?

Pavel спросил: 10 мая 2018 в 04:31 в: java

У меня есть служба RESTful Spring Boot, которая взаимодействует с H2 RDBMS. Я решил расширить ее, добавив поддержку MongoDB и создать два профиля, каждый для каждого источника данных.

Мое намерение состоит в использовании общих объектов, поэтому я начал с изменения полей id от Long до BigInteger потому что, если я использую String как id, это вызовет проблемы со сложностями SQL.

@Document
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@EqualsAndHashCode
@ToString
public final class Book {    @org.springframework.data.annotation.Id
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private BigInteger id;    private String title;    @ManyToOne(optional = false)
    private Author author;}

И, конечно же, соответствующие репозитории тоже.

public interface BookRepository extends CrudRepository<Book, BigInteger> {}

Я также изменил таблицы H2, заменив BIGINT типа BIGDECIMAL и пополнив мои таблицы. У меня есть spring.jpa.hibernate.ddl-aeuto=validate в моих свойствах, а проверка Hibernate - с кодом java.math.BigInteger с BIGINT от db.

В конце концов, я отлаживал свое приложение но все методы, принадлежащие репозиторию, возвращают пустые результаты даже findAll(), но я вижу, что записи представлены в таблицах, а "SELECT * from 'table'(e.g. BOOK)" возвращает все записи.

Не могли бы вы пояснить мне несколько вопросов?

Это хороший способ объединить сущность JPA и MongoDB в одном классе? Работает ли Spring Data с BigInteger? Любые подсказки?

ОБНОВЛЕНИЕ: я попытался начать с нуля, и я обнаружил, что после аннотирования объектов с аннотацией @Document репозиторий CRUD начинает плохо себя вести и терпит неудачу с org.springframework.data.mapping.PropertyReferenceException on методы аннотируются @Query (native = true)


1 ответ

Есть решение
Marina ответил: 14 июня 2018 в 08:58

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

В этом конкретном случае вы хорошо разработали решение для РСУБД, но чтобы получить больше преимуществ от MongoDB, вам нужно подумать дважды о иерархии документов / коллекций и рассмотрите вложенные документы.

Старайтесь избегать объединений в MongoDB. Они очень дорого стоят