【问题标题】:How to force Spring Data to create query methods with entity runtime type?如何强制 Spring Data 创建具有实体运行时类型的查询方法?
【发布时间】:2016-11-29 15:30:50
【问题描述】:

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

【问题讨论】:

    标签: java spring neo4j spring-data


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 2020-03-21
      相关资源
      最近更新 更多