Как создать общие сущности для RDBMS и MongoDB? - PullRequest
0 голосов
/ 03 июня 2018

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

Я собираюсь использовать общие сущности, поэтому я начал с изменения полей id с Long to 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 из базы данных.

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

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

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

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

1 Ответ

0 голосов
/ 08 июля 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...