ikb*_*bal 6 java ddl generic-programming spring-data-jpa spring-boot
我正在尝试创建一个 Spring Boot 应用程序,我想在其中按需创建和使用数据库表,而无需为它们定义实体/存储库。
我有一个基本的 Business 实体和 BusinessType 实体来保留业务类型。我希望能够为具有自己的表的业务类型(比如 Coffeeshop)动态创建一个表(同时我可以在 BusinessType 表上保留表的名称并决定从那里查询哪个表)。
因此,如果不为 Coffeeshop 定义实体和/或创建 CrudRepository,我可以创建一个名为 Coffeeshop 的表,然后对其进行一些查询吗?
如果没有,我的选择是什么?在典型的 Spring Data JPA 应用程序中,您如何处理拥有基类型并允许系统具有更多具体类型(持久化并与基类型关联)的情况?
谢谢
您描述的持久性策略不太适合 JPA。JPA 是一种 ORM(对象关系映射)策略,其中框架将数据从基于类的对象映射到模式定义的关系表中的行。如果表没有对应的类,或者类没有特定的表,那么注释驱动的实现就会变得复杂。
要使用 JPA 解决您的问题,一种理想的解决方案是将所有业务保留在一个表中(映射到业务实体类,如您所描述的),并在表上有一个(外来)键以允许每一行都有一种商业类型。然后,您可以通过查询选择具有特定类型的企业集(而不是通过定位不同的表)。
Business
id | type | name | etc...
1 COFFEESHOP Alices Coffee
BusinessType
id | name | industry
COFFEESHOP Cafe HOSPITAILITY
Run Code Online (Sandbox Code Playgroud)
然后,要获取系统中的所有咖啡店,您需要定义一个 BusinessRepository 方法
@Query(value = "{ 'type': ?0 }")
List<Business> findAllByType(String type);
Run Code Online (Sandbox Code Playgroud)
要使用您描述的表创建策略解决您的问题,您必须自己编写大部分数据访问层。您可以在手写的 BusinessDAO 类(不使用 JPA 或注释)中执行此操作,该类将具有使用普通 JDBC 构造和执行 SQL 语句的方法,以实现所需的模式操作。如果您想要一个库来模拟 JPA 为您提供的 SQL 方言独立性,您可以查看 JOOQ。此策略将需要更多的工作,并且此类应用程序将需要架构编辑权限。在企业环境中,通常不鼓励这样做。
| 归档时间: |
|
| 查看次数: |
708 次 |
| 最近记录: |