使用Java驱动程序获取带有Java驱动程序的mongoDB中最后插入的文档的ID-WITH TYPED COLLECTION

时间:2019-01-25 09:17:13

标签: java mongodb

这个问题与Get ID of last inserted document in a mongoDB w/ Java driver非常相似,但有一个区别:我使用的是类型化/通用集合。

DTO示例:

public class ForumMessageDTO {
    @Expose
    @BsonId
    private ObjectId id;
    private Long forumId;
    @Expose
    private Long userId;
    @Expose
    private Date created;
    @Expose
    private String message;
    /* getters and setters are not shown here but they are implemented.... */
}

用于插入文档的示例代码:

public ForumMessageDTO addMessage(Long forumId, Long userId, String message) {
    ForumMessageDTO dto = new ForumMessageDTO(forumId, userId, new Date(), message);
    messages.insertOne(dto);
    return dto; /* dto.id is null here!!! But why? */
}   

返回的dto应该填写其id字段,因为它已使用@BsonId进行了注释并且具有ObjectId类型。实际上,它仍然为null,我看不到如何访问插入文档的ObjectId。

此版本的collection.insertOne不会返回任何内容,并且显然不会更改dto的id字段。

可能我可以手动将DTO转换为Document并使用该版本的collection.insertOne,然后获取对象ID并将其放回DTO中,但这效率很低。考虑到我将要使用具有许多不同DTO类的许多集合的事实,并且我不想为所有这些都编写手动转换。

那么我该如何检索刚刚插入的文档的对象ID?

0 个答案:

没有答案