实体的所有存储库方法上的隐藏和静态过滤器

时间:2019-04-05 15:22:35

标签: spring spring-data-jpa

免责声明:请不要建议数据库模型重新设计/数据库模型概念存在缺陷。这个问题与所描述的情况有关,无法适当地更改该情况。


假设我有一个表fruits,其中namecolortype作为字段 这意味着,所有苹果都有type=apple,所有橘子都有type=orange,依此类推。

现在使用映射的这3个字段和Apple创建一个名为Table=fruits的JPA实体/模型,我想创建一个AppleRepository,其中参数type是静态设置的到apple,外部消费者看不到。

所以我要提供

AppleRepository.findByTypeAndNameContains,要求呼叫者现在将type设置为apple

但只是

AppleRepository.findByNameContains,而类型静态设置为apple

(然后使用相同的方法,我选择Orange,然后选择OrangeRepository使用type=orange

我了解我可以使用@Query编写一个自定义查询,其中类型只是静态包含的,并且仅映射动态参数...但是

问题: 有没有不用@Query来实现的优雅方法?

1 个答案:

答案 0 :(得分:2)

您所拥有的是“单一表”继承策略背后的原理。它包括将所有实体按层次结构存储在单个表中,并使用区分符列(即您的类型列)对其进行区分。

有关详情,请参见the documentation