簡體   English   中英

spring 數據 mongodb jpa 使用復合 id 查找

[英]spring data mongodb jpa find by id with composite id

我正在將 mongodb 與 springboot 一起使用,並且我有一個帶有自定義_id的實體,就像這樣(在Java中):

@Document(collection="myEntity")
public class MyEntity {
    @Id
    private MyId id;
    private String field1;
    // getters, setters
    public static class MyId {
        private long field1;
        private String field2;
        private String field3;
        // getters, setters
    }

}

在 mongo 存儲庫中,我有一個findById(MyId)方法,我想用它來通過 id 查找實體。 默認的save(MyEntity)方法可以正常工作,保存實體以便MyId#id字段包含在NumberLong中。

例如 mongodb 查詢

db.myEntity.find()

將返回一個實體列表,例如

{
  "_id": {
    "field1": NumberLong("1"),
    "field2": "a",
    "field3": "b"
  },
  "field1": "aa"
}

另一方面,啟用 mongodb 查詢的調試日志記錄后, findById方法顯示

findOne 使用查詢{ "_id": { "field1": "$numberLong": "1", "field2": "a", "field3": "b" }, "field1": "aa" }

在 mongo shell 中:

運行db.myEntity.find({ "_id": { "field1": { "$numberLong": "1" }, "field2": "a", "field3": "b" }, "field1": "aa" })沒有結果。

運行db.myEntity.find({ "_id": { "field1": new NumberLong("1"), "field2": "a", "field3": "b" }, "field1": "aa" })返回結果。

我該如何解決這個問題,以便findById(MyId)查詢方法有效(返回給定 id 我期望的結果)?

我認為您應該嘗試在您的自定義 ID class 處覆蓋.toString() MongoDB 的.toString()實現與 Java 的實現不同(包含 hashCode)。

希望這可以幫助某人。 當指定@org.springframework.data.mongodb.repository.Query時,jpa“查找”工作,如下所示:

@Query("{ '_id.field1': ?0, '_id.field2': ?1, '_id.field3': ?2}")
Optional<MyEntity> find(long field1, String field2, String field3); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM