gpt4 book ai didi

java - 如何为 RDBMS 和 MongoDB 创建通用实体?

转载 作者:行者123 更新时间:2023-12-02 11:10:05 25 4
gpt4 key购买 nike

我有一个与 H2 RDBMS 交互的 Spring Boot RESTful 服务。我决定通过添加 MongoDB 支持来扩展它,并创建两个配置文件,每个配置文件对应一个数据源。

我的目的是使用通用实体,因此我开始将 id 字段从 Long 更改为 BigInteger 因为如果我使用 String as 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> {}

我还通过用 BIGDECIMAL 替换 BIGINT 类型来修改 H2 表并重新填充我的表。我的属性中有 spring.jpa.hibernate.ddl-aeuto=validate ,并且 Hibernate 验证提示将 java.math.BigIntegerBIGINT 匹配来自数据库。

毕竟,我调试了我的应用程序,但属于存储库的所有方法甚至都返回空结果 findAll(),但我看到记录显示在表中,并且 "SELECT * from ' table'(e.g. BOOK)" 返回所有记录。

你能帮我解答一些问题吗?

将 JPA 和 MongoDB 的实体合并在一个类中是否是一种好方法? Spring Data 可以与 BigInteger 一起正常工作吗?有什么提示吗?

更新:我尝试从头开始,发现在使用 @Document 注释注释实体后,CRUD 存储库开始行为不当,并在注释 @Query(native=true) 的方法上出现 org.springframework.data.mapping.PropertyReferenceException 失败

最佳答案

我想你最好避免它并创建两个完全不同的项目/分支。

在这种特殊情况下,您已经很好地设计了 RDBMS 解决方案,但为了从 MongoDB 获得更多优势,您必须仔细考虑文档/集合层次结构并考虑嵌套文档。

尽量避免 MongoDB 中的联接。它们的成本很高

关于java - 如何为 RDBMS 和 MongoDB 创建通用实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50669521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com