当前位置: 首页 > 知识库问答 >
问题:

这是什么意思保存(S实体);在Spring Repository中?

阎知
2023-03-14

在Spring Data项目中,CrudRepository为正在管理的实体类提供了复杂的CRUD功能。

public interface CrudRepository<T, ID extends Serializable>
extends Repository<T, ID> {

    <S extends T> S save(S entity);

    T findOne(ID primaryKey);

    Iterable<T> findAll();

    Long count();

    void delete(T entity);

    boolean exists(ID primaryKey);

    // … more functionality omitted.
}

一般来说,我知道“S扩展T”的含义,即S,save操作的返回类型,必须是T的子类型。为什么需要添加约束之类的内容?我认为这样做很好:

T save (T entity);

如中所示

void delete(T entity);

我在google上找到了更多的帮助,我找到了关于stackoverflow本身的以下问题,但我并不清楚:

Spring Crudepository:为什么要发明一种新的泛型S

谢谢你。

共有1个答案

尹何平
2023-03-14

如果你把它当作

T save (T entity);

那么,您可以将结果分配给的唯一变量必须是T类型。

所以,如果你有一个CrudRepository

Dog dog = getDog();
Dog savedDog = repository.save(dog);

你会得到一个编译错误-你不能将结果分配给狗,因为它必须是t型的,在这种情况下是动物型的。

您需要检查返回的值是否确实属于狗的类型,如果是,请将其强制转换为狗,将其放入savedDog。

声明保持原样意味着可以将其分配给与原始参数类型相同的变量,因为类型解析将允许这样做。

声明本身并没有指定如何保存狗的非动物部分。它所做的只是允许将结果分配回Dog,如果它最初是Dog

 类似资料:
  • 问题内容: ~~~~ 在Spring Data项目中,CrudRepository为正在管理的实体类提供复杂的CRUD功能。 通常,我知道“ S扩展T”的含义,即保存操作的返回类型S必须是T的子类型。为什么必须添加诸如约束?我认为这样做是可以的: 如 谢谢。 问题答案: ~~~~ 如果你要拥有它 然后,您可以将结果分配给的唯一变量必须是type 。 因此,如果您有一个,并且您有 您会遇到编译错误-

  • 问题内容: 我是Go的新手,在浏览其他一些线程时遇到了以下代码行: 含义是什么?它是否指定将在if条件中分配某些内容(因为err似乎正在发生这种情况)?我在Wiki上找不到这种语法的示例,并且我很好奇它的用途。 问题答案: 因为返回两个值,所以如果需要它们中的任何一个,都必须在某个地方接收这些值。该是一个占位符,基本的意思是“我不关心这个特殊的返回值。” 在这里,我们只关心检查错误,而无需对实际的

  • 这个正则表达式什么意思?这里$1代表什么?

  • 问题内容: 这个头衔看起来并不那么疯狂。我承诺!! 在研究另一个问题时,我在Stack Overflow的样式表中注意到以下内容: 这是一种奇怪的条件样式吗?这是一个错误吗?假设这不是一个错误,那么它适用于所有IE版本吗?有没有一种方法可以指定给定规则仅适用于大于(例如7)的IE版本? 我以前从未遇到过-我一直在使用条件注释来表示IE特定的样式(以及其价值,我宁愿将所有IE特定样式完全分开)。 问

  • 问题内容: 我有一个类似于以下的简单代码,并将其作为节点模块执行: 我知道这是默认上下文(例如在浏览器中),但是关键字指的是什么? 问题答案: (在模块的上下文中)与node.js中的相同。但是,通常应该使用/ 代替,这样可以清楚地清除正在修改的内容。

  • 问题内容: 在Python中是什么意思?下面的代码有什么作用? 例如… 问题答案: 这是一种字符串格式语法(它是从C借用的)。 请参阅“ PyFormat”: Python支持将值格式化为字符串。尽管这可能包含非常复杂的表达式,但最基本的用法是使用占位符将值插入字符串。 编辑: 这是一个非常简单的示例: 该令牌允许我插入(和潜在的格式)的字符串。请注意,令牌被替换为符号后传递给字符串的任何内容。还