Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JpaRepository保存方法的泛型参数 问题:_Java_Spring_Hibernate_Generics - Fatal编程技术网

Java JpaRepository保存方法的泛型参数 问题:

Java JpaRepository保存方法的泛型参数 问题:,java,spring,hibernate,generics,Java,Spring,Hibernate,Generics,我的域层有几个ValueClass,它们都扩展了一个AbstractValue类,而这个AbstractValue类扩展了一个BaseEntity类 public abstract class AbstractValue extends BaseEntity{} public class Value extends AbstractValue{} 在我的存储库层,我正在使用将自动实现的Spring数据存储库。在域层中,有一些AbstractValueRepository扩展了Crudepos

我的域层有几个ValueClass,它们都扩展了一个AbstractValue类,而这个AbstractValue类扩展了一个BaseEntity类

public abstract class AbstractValue extends BaseEntity{}

public class Value extends AbstractValue{}
在我的存储库层,我正在使用将自动实现的Spring数据存储库。在域层中,有一些AbstractValueRepository扩展了Crudepository接口,还有一些ValueRepository扩展了AbstractValueRepository

@NoRepositoryBean
public interface AbstractValueRepository<T extends AbstractValue> extends CrudRepository<T, Long> {}

public interface ValueRepository extends AbstractValueRepository<Value>
@NoRepositoryBean
公共接口AbstractValueRepository扩展了Crudepository{}
公共接口ValueRepository扩展了AbstractValueRepository
在我的业务层中,我有一个ValueService接口,其中包含一些方法和实现类,以及一个列出所有可用ValueRepositories的枚举

public enum ValueType {

    VALUE(ValueRepository.class),
    VALUE1(Value1Repository.class),
    VALUE2(Value2Repository.class),
    VALUE3(Value3Repository.class),
    ;

    private final Class<? extends AbstractValueRepository<? extends AbstractValue>>     repository;

    ValueType(final Class<? extends AbstractValueRepository<? extends AbstractValue>> repository) {
        this.repository = repository;
    }

    public Class<? extends AbstractValueRepository<? extends AbstractValue>> getRepository() {
        return repository;
    }
}

@Service
public class ValueServiceImpl implements ValueService {

    @Autowired 
    private ApplicationContext applicationContext;

    @Autowired
    private ApplicatieRepository applicatieRepository;

    @Override
    public <S extends AbstractValueType> S updateValueForType(ValueType type, S value) {
        return applicationContext.getBean(type.getRepository()).save(value);
    }

    @Override
    public <S extends AbstractValueType> S createValueForType(ValueType type, S value) {
        return applicationContext.getBean(type.getRepository()).save(value);
    }
}
公共枚举值类型{
值(ValueRepository.class),
VALUE1(Value1Repository.class),
VALUE2(Value2Repository.class),
VALUE3(Value3Repository.class),
;
私人期末班
@NoRepositoryBean
public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> {
    <S extends T> S save(S var1);
}
@Override
public <S extends AbstractValueType> S updateValueForType(ValueType type, T <? extends S> value) {
    return applicationContext.getBean(type.getRepository()).save(value);
}