Home > Net >  FindById doesn't work with UUID in Mongodb SpringData
FindById doesn't work with UUID in Mongodb SpringData

Time:09-20

I try to use Mongodb with Spring Data.

I wanted to use UUID instead of ObjectId. I have followed this tutorial: https://www.baeldung.com/java-mongodb-uuid (some differences might exist because I use Kotlin). I took path 2 where I added Entity callback. When I create a new entity it is saved to the database with UUID as I wanted. If I use mongo console I can type:

db.home.find({_id: UUID("18aafcf9-0c5a-46f3-84ff-1c25b00dd1ab")})

And I will find my entity by id.

However, when I try to do it by code it doesn't work as it should. It will always throw here DataOperationException(NOT_FOUND) because findById returns null.

fun findHomeById(id: String): Home {
    val home = homeRepository.findById(id)
    return home.unwrap() ?: throw DataOperationException(NOT_FOUND)
}

Here is repository

@Repository
interface HomeRepository: MongoRepository<Home, String> 

Abstraction with id.

abstract class UuidIdentifiedEntity {
    @Id
    var id: UUID? = null // I tried use UUID type and String with the same result
}

And my home class

class Home(
   var address: String,
   var rooms: Int,
): UuidIdentifiedEntity() 

CodePudding user response:

Not sure if this will help, but see if changing your @Id annotation to @MongoId fixes this. Under certain circumstances, Mongo needs to know more about a field being used for an id. @MongoId should give you more control on how the field is stored too.

What is use of @MongoId in Spring Data MongoDB over @Id?

  • Related