如何强制Spring Data创建具有实体运行时类型的查询方法?

时间:2016-11-29 15:30:51

标签: java spring neo4j spring-data

我有大约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注释。那不是我要找的。

1 个答案:

答案 0 :(得分:1)

这很可能是由于类型擦除:在运行时只有可用的类型约束MetaObject。如果你想使用(通过spring-data)实际相关的子类,你必须创建MetaObjectRepository的显式接口,如下所示:

public class Transmogrifier extends MetaObject

public interface MetaTransmogrifierRepository 
    extends MetaObjectRepository<Transmogrifier> {}