Spring Data MongoDB идентификатор как объект - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть класс Java, который в качестве идентификатора имеет объект, который содержит фактическое значение идентификатора. Как я могу использовать Spring Data MongoDB для генерации и идентификации идентификатора и как определить хранилище MongoDB?

Пример:

@Document
class A {
  @Id
  private B id;

}
class B{
 private String id;
 private String idAppGenerator;
}

Это вызывает исключение из-за того, что Springне может автоматически сгенерировать значение для класса B.

1 Ответ

1 голос
/ 06 ноября 2019

Нашел решение.

Хранилище данных Spring создается следующим образом:

@Repository
public interface ARepository extends MongoRepository<A, B>{
//B is the object identity
}

Для автоматического создания значений для B необходимо создать событие:

Component
public class IdentifierListener extends AbstractMongoEventListener<A> {

    @Override
    public void onBeforeConvert(BeforeConvertEvent<A> event){
        if(event.getSource().getId() == null){
            B id = new B();
            id.setId(new ObjectId());
            event.getSource().setId(id);
        }
    }
}
...