Save,Create 方法的区别

在TDD测试中遇到一个问题,使用save()方法重复插入相同数据时,仅插入一条记录,而使用create()方法则能成功插入多条。save()方法是非静态的,用于插入或更新,若对象已有主键则视为更新;create()是静态方法,每次创建新实例并插入,适合插入多条相同数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题背景:
在写TDD的时候,我测试一个检查报名上限的方法,就是对一个报名信息在它插入数据库前,检查它是否到达报名限制,
然后在测试的时候要预先对数据库进行插值,
所有我用了一个for循环对一条数据进行重复插值:


        $join=new Join();//报名信息的实例对象
        $join=[
            'XH'=>0,
            'XM'=>'',
            'GENDER'=>0,
            'UNIT_ID'=>5,
            'DEPTID'=>15,
            'YEAR_ID'=>1,
            'NUMBER'<
在Elasticsearch中,`save` 和 `create` 方法都是用于将文档保存到索引中的操作,但它们之间有一些关键的区别: 1. **创建新文档**: - `create` 方法专门用于创建一个新的文档。如果文档已存在(即具有相同的ID),则 `create` 方法会失败并返回错误。 - `save` 方法则会更新已存在的文档。如果文档不存在,则 `save` 方法会创建一个新文档。 2. **幂等性**: - `create` 方法是幂等的,即多次调用 `create` 方法保存具有相同ID的文档会导致错误。 - `save` 方法不是幂等的,多次调用 `save` 方法保存具有相同ID的文档会更新文档的内容。 3. **行为**: - `create` 方法通常用于确保文档的唯一性,避免覆盖现有文档。 - `save` 方法则用于更新或创建文档,具体取决于文档是否已存在。 ### 示例代码 假设我们有一个 `Person` 文档: ```java import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.xcontent.XContentType; public class ElasticsearchExample { public static void main(String[] args) throws Exception { RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost", 9200, "http"))); // 使用 create 方法 IndexRequest createRequest = new IndexRequest("people") .id("1") .source(XContentType.JSON, "name", "John Doe", "age", 30); IndexResponse createResponse = client.index(createRequest, RequestOptions.DEFAULT); System.out.println("Create Response: " + createResponse.getResult()); // 使用 save 方法 IndexRequest saveRequest = new IndexRequest("people") .id("1") .source(XContentType.JSON, "name", "Jane Doe", "age", 25); IndexResponse saveResponse = client.index(saveRequest, RequestOptions.DEFAULT); System.out.println("Save Response: " + saveResponse.getResult()); client.close(); } } ``` 在上述代码中,`create` 方法会尝试创建一个新的文档,而 `save` 方法则会更新已存在的文档。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值