Java JpaRepository保存方法的泛型参数 问题:
我的域层有几个ValueClass,它们都扩展了一个AbstractValue类,而这个AbstractValue类扩展了一个BaseEntity类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
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);
}