我有一个与H2 RDBMS交互的Spring Boot RESTful服务。 我决定通过添加MongoDB支持来扩展它,并为每个数据源创建两个配置文件。
我的目的是使用通用实体,因此我开始将id
字段从Long
更改为BigInteger
,因为如果我使用String
作为{{1}它将导致SQL插入的性能问题。
id
当然还有相应的存储库。
@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;
}
我还通过用BIGDECIMAL替换BIGINT类型来修改H2表并重新填充我的表。我的属性中有public interface BookRepository extends CrudRepository<Book, BigInteger> {}
,并且抱怨Hibernate验证将spring.jpa.hibernate.ddl-aeuto=validate
与来自db的java.math.BigInteger
匹配。
毕竟,我调试了我的应用程序,但属于存储库的所有方法都返回空结果甚至BIGINT
,但我看到记录显示在表中,findAll()
返回所有记录。
你能澄清一些问题吗?
将JPA和MongoDB的实体组合在一个类中是一种好方法吗? Spring Data是否适用于BigInteger?任何提示?
更新: 我试图从头开始,我发现在使用@Document注释注释实体后,CRUD存储库开始出现行为异常,并且在注释@Query(native = true)的方法上使用org.springframework.data.mapping.PropertyReferenceException失败/ p>
答案 0 :(得分:1)
我想您最好避免使用它,并创建两个完全不同的项目/分支。
在这种特殊情况下,您已经精心设计了RDBMS解决方案,但是要从MongoDB获得更多优势,您必须三思而行考虑文档/集合层次结构并考虑嵌套文档。
尝试避免在MongoDB中加入。它们非常昂贵