是什么意思 save(S entity); 在Spring Repository中?
在Spring Data项目中,CrudRepository为正在管理的实体类提供了复杂的CRUDfunction。
public interface CrudRepository extends Repository { S save(S entity); T findOne(ID primaryKey); Iterable findAll(); Long count(); void delete(T entity); boolean exists(ID primaryKey); // … more functionality omitted. }
一般来说,我知道“S extends T”意味着什么,即S,保存操作的返回类型,必须是T的子类型。为什么有必要添加诸如约束? 我认为做这样的事情会很好:
T save (T entity);
如在
void delete(T entity);
我已经用谷歌搜索了更多的帮助,我已经在stackoverflow本身上找到了以下问题,但对我来说并不是很清楚:
Spring CrudRepository:为什么要发明一个新的generics类型S.
谢谢。
如果你有它
T save (T entity);
然后,您可以分配结果的唯一变量必须是T
类型。
所以,如果你有一个CrudRepository
,那么你就拥有了
Dog dog = getDog(); Dog savedDog = repository.save(dog);
您将收到编译错误 – 您无法将结果分配给Dog
,因为它必须是T
类型,在本例中为Animal
。
您需要检查返回的值是否确实是Dog
类型,如果是,则将其savedDog
为Dog
以将其放入savedDog
。
通过声明,它意味着您可以将它分配给与原始参数相同类型的变量,因为类型解析将允许它。
声明本身没有具体说明如何保存狗的非动物部分。 它所做的只是允许将结果分配Dog
如果它最初是Dog
。