如何强制弹簧数据使用实体运行时类型创建查询方法



我有大约5个对象,我想使用类似的事情。我发现,不要为代码提供策略,我会在一个地方为这些对象提供逻辑。

public class MetaObjectController<T extends MetaObject> {
    @Autowired
    private final MetaObjectRepository<T> repository;
    // generic logic

这是存储库的外观:

public interface MetaObjectRepository<T extends MetaObject> extends GraphRepository<T> {
    T findByName(String name);
}

现在,我创建了使用委托的具体类:

public class ExperimentalController {
    @Autowired
    private final MetaObjectController<MetaCategory> metaController;

    @RequestMapping(method = RequestMethod.POST)
    public void add(@RequestBody MetaCategory toAdd) {
        metaController.add(toAdd);
    }

现在,当我查看我看到的生成的查询时,尽管正确实例化,但存储库将MetaObject作为实体名称而不是运行时类型。

是否有一种方法可以强迫存储库使用运行时类型?

请不要建议放置@Query nnnotation。那不是我想要的。

这很可能是由于类型擦除而造成的:在运行时,只有类型约束是MetaObject。如果要使用(通过春季)实际相关的子类,则必须创建MetaObjectRepository的显式接口:

public class Transmogrifier extends MetaObject
public interface MetaTransmogrifierRepository 
    extends MetaObjectRepository<Transmogrifier> {}

最新更新