Весенние данные- JPA множественный вложенный объект

#java #spring #spring-boot #spring-data-jpa #spring-data

#java #весна #весенняя загрузка #spring-data-jpa #spring-данные

Вопрос:

У меня есть структура класса примерно так, как показано ниже:

 public class X {

@Id
private Long id;

//One to one mapping
private Y y;

....Some more attibutes

}

public class Y {

@Id
private Long id;

//ManyToOne mapping
private Z z;

....Some more attibutes

}

public class Z {

@Id
private Long id;

....Some more attibutes

}
  

Теперь у меня есть пользовательский интерфейс, как показано ниже

 public interface XRepository extends JPARepository<X, Long> {
    // This is not working,    
    public X findByIdAndYIdAndZId(Long xId, Long yId, Long zId);
    
    //This also doesn't work obviously for same reason as above one
    public X findYIdAndZId(Long yId, Long zId);

}
  

Я получаю это исключение

 org.springframework.data.mapping.PropertyReferenceException: No property zId found for type X!
  

Пожалуйста, помогите мне, как создать метод для такого сценария

Ответ №1:

Поле Z не существует в X , оно находится в Y классе. Итак, вы должны использовать полный путь к объекту для Z ‘s id .

 public X findByIdAndYIdAndYZId(Long xId, Long yId, Long zId);
  

Примечание: Пожалуйста, подумайте о том, чтобы использовать понятное имя для класса. Я думаю, они только для примера.

Ответ №2:

Вы можете использовать import org.springframework.data.mongodb.repository.Query; аннотацию.

  @Query("{$and : [{'y.id': ?0}, {'y.z.id': ?1 }]}")
 public X findByIdAndYIdAndZId(Long yId, Long zId);
  

Вы получите больше представления о Query

Комментарии:

1. Я знаю, что мог бы сделать это с помощью запроса, но я хотел использовать метод.