У меня есть служба 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)