我已经浏览了链接: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保存为空值?
一个解决方案可能是使用defaults.
您的模式可以为某些路径定义默认值。如果您在没有设置该路径的情况下创建一个新文档,默认值将生效。
所以如果你想“允许空值”,只需通过添加到你的模式定义使其成为默认值
lastName: { type: String, default: null }
。当没有lastName
(又名null)时,您将获得默认值(null)。null
,因为它会使查询变得复杂:查询键:null 将为您检索键为空或键不存在的所有文档。
现在可以从 Spring Data MongoDB 3.3. 开始。 例如:
@Field(write = Field.Write.ALWAYS)
private String lastName;
作为上面mcount的回答,我已经解决了这个问题