[英]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.