Spring Data Mongo 不会将字段值保留为 null - 这不起作用

问题描述 投票:0回答:3

我已经浏览了链接:https://jira.spring.io/browse/DATAMONGO-1107而且我没有看到在

application.properties
文件中设置spring.data.mongodb.persist-null-fields=true的选项。

Spring Data Mongo 甚至不会保留值为空的字段。如果我想这样做,如何允许保存空值?

Person.java

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document
public class Person {
    private String id;
    private String firstName;
    private String lastName;
    private String emailId;
    @Field
    private List<Hobbies> hobbies;
}

Hobbies.java

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Hobbies {
    private String interest;
    private String sports;
}

save() - 此方法不保存数据。

private void savePersons() {
        Hobbies hobbies1 = Hobbies.builder().interest("Indoor").sports("Chess").build();
        Hobbies hobbies2 = Hobbies.builder().interest("Loveoor").sports("Table Tennis").build();
        Hobbies hobbies3 = Hobbies.builder().interest("Gamedoor").sports("Cricket").build();
        Hobbies hobbies4 = Hobbies.builder().interest("Happydoor").sports("Lawn Tennis").build();


        Person john = Person.builder().firstName("John")
                .emailId("[email protected]").hobbies(Arrays.asList(hobbies1, hobbies2)).build();

        Person neha = Person.builder().firstName("Neha").lastName("Parate")
                .emailId("[email protected]").hobbies(Arrays.asList(hobbies1, hobbies2, hobbies4)).build();

        repository.saveAll(Arrays.asList(john, neha));
    }

我没有看到lastName已经保存在文档中。还有,如何将Date保存为空值?

spring mongodb spring-data-mongodb
3个回答
0
投票

一个解决方案可能是使用defaults.

您的模式可以为某些路径定义默认值。如果您在没有设置该路径的情况下创建一个新文档,默认值将生效。

所以如果你想“允许空值”,只需通过添加到你的模式定义使其成为默认值

lastName: { type: String, default: null }
。当没有
lastName
(又名null)时,您将获得默认值(null)。
我会重新考虑允许
null
,因为它会使查询变得复杂:查询键:null 将为您检索键为空或键不存在的所有文档。


0
投票

现在可以从 Spring Data MongoDB 3.3. 开始。 例如:

@Field(write = Field.Write.ALWAYS)
private String lastName;

-1
投票

作为上面mcount的回答,我已经解决了这个问题

© www.soinside.com 2019 - 2024. All rights reserved.