我有大约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
注释。那不是我要找的。 p>
答案 0 :(得分:1)
这很可能是由于类型擦除:在运行时只有可用的类型约束MetaObject
。如果你想使用(通过spring-data)实际相关的子类,你必须创建MetaObjectRepository
的显式接口,如下所示:
public class Transmogrifier extends MetaObject
public interface MetaTransmogrifierRepository
extends MetaObjectRepository<Transmogrifier> {}