关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。
14小时前关门了。
改进这个问题
我在一个空间数据库中有数百个表,用于各种功能。这些表中的每一个都有公共字段,如id、name、geometry、dateadded等,还有许多特定于每个给定表的唯一字段。
我的应用程序将接收需要添加到数据库正确表中的数据行。有时我也需要更新一行,但我只需要按公共属性进行查询。
我想知道是否有一个“最佳实践”的方法来实现这个功能使用springboot。
我目前的方法有一种不好的代码味道
目前,我有一个工作原型使用的功能,我将在最后的应用程序中需要的一小部分。然而,到目前为止,我的方法似乎非常冗长,闻起来不对劲。我相信一定有更好的办法!
目前我有:
一 @Entity
为每个特征初始化(每个特征扩展一个用 @MappedSuperclass
这样我就不会重复与公共字段相关的代码)。
一个spring数据jpa存储库 @Entity
班级。除了findbyidandversiondate查询之外,它们没有真正的代码。
一 @Service
类,该类处理根据接收的数据调用正确的存储库。
这种方法是可行的,但最终我将得到大约100个基本相同的存储库接口。在我看来,应该可以有某种类型的通用存储库,我可以将一个类定义传递到其中,以确定应该将数据添加到哪个表中?
我不喜欢SpringDataJPA。我想如果我退一步,只使用hibernate(可能是一个通用的dao或其他什么?),这会更容易。如果是这样的话,请随时告诉我!
任何指点都将不胜感激。谢谢!
1条答案
按热度按时间jgwigjjp1#
Spring解决方案
你可以用
Inheritance.TABLE_PER_PAGE
你的超级课堂策略,比如:通过你的
SuperARepository
,可以存储和检索所有子类。一个问题是,当您查询以查找对象时,hibernate对所有表中的所有数据执行联合查询。在您的案例中,它可能会带来很大的性能开销。
另一个问题是当您查询一个子类(比如
SubA1
),您仍然收到SuperA
你需要向下转换才能访问实际的类。jpa解决方案
在这种情况下,我建议使用jpa(jpa是一种规范,hibernate是jpa提供者之一)。最好使用通用的jpa接口,而不是特定于hibernate的接口。您提到了一个通用dao,这是一个很好的方法。
在jpa中,使用
@MappedSuperclass
是最佳的。你只要用EntityManager
发出查询。唯一的潜在问题是,如果需要在不知道对象类型的情况下查询对象。但是,我假设您必须知道类型,因为这些是数据库中的不同表。
例如: