0

私は@DocumentのIDを自動的にインクリメントするためにRepositoryを作成しましたが、今は明示的に新しいIDを設定する@Idセッターメソッドを呼び出す必要があります。 私はこのように私のコードを実装する場合、私はそれを保存する前に、それぞれ、すべてのドキュメントに対してsequenceRepository.getNextId(...)を呼び出す必要がありJPA @PrePersist@PrePersist SpringListの代わりにEventListener

@Repository 
interface UserRepository : MongoRepository<User, Long>, UserRepositoryCustom 

interface UserRepositoryCustom { 
    fun save(user: User): User 
} 

class UserRepositoryImpl(private val mongoOperations: MongoOperations, private val sequenceRepository: SequenceRepository) : UserRepositoryCustom { 

    override fun save(user: User): User { 
     // need to call this line for every @Document 
     user.id = sequenceRepository.getNextId(User.SEQUENCE_KEY) 

     mongoOperations.insert(user) 
     return user 
    } 
} 

GitHub Code

のように、この使用してリスナーを行うことができます方法はあります。

EventListeners@PrePersistとすることができます。これを実現するには、spring-data-mongo代替機能または類似機能がありますか?

+0

public void onBeforeSave(BeforeSaveEvent<E> event) { if (LOG.isDebugEnabled()) { LOG.debug("onBeforeSave({}, {})", event.getSource(), event.getDBObject()); } } 
[理由](https://www.clever-cloud.com/blog/engineering/2015/05/20、AbstractMongoEventListenerクラスを拡張しPrePersist等価を達成するために以下のメソッドをオーバーライドすることができ/ why-auto-increment-is-a-terrible-idea /)は、自動インクリメントをまったく使用していますか? – madhead

答えて

2

Springデータでは、mongoはイベントリスナーを提供します。たとえば、