2016-02-17 4 views
0

У меня странная ошибка, хотя я думаю, что все выглядит нормально.Интерфейс JpaRepository - не найдено ни одного собственника

Pet класс:

@Entity 
public class Pet { 

    @Id 
    @GeneratedValue 
    private long id; 
    .... 
    @ManyToOne(cascade = CascadeType.PERSIST) 
    @JoinColumn(name = "owner_id") 
    private PetOwner petOwner; 
} 

PetOwner

@Entity(name = "pet_owner") 
public class PetOwner extends User{ 
    ... 
    @OneToMany(cascade = CascadeType.ALL,mappedBy = "petOwner") 
    private List<Pet> pets; 
} 

Pet Repository

@Repository 
public interface PetRepository extends JpaRepository<Pet, Long> { 
    List<Pet> findByOwner(PetOwner owner); 
} 

Как вы можете видеть, я хочу, чтобы получить список животных, дающих владельцу. Во время работы получите ошибку:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'petRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property owner found for type Pet!

Зачем нужна эта ошибка?

ответ

2

Поскольку вы назвали ваше поле petOwner, вы должны использовать findByPetOwner имя методы вместо findByOwner:

@Repository 
public interface PetRepository extends JpaRepository<Pet, Long> { 
    List<Pet> findByPetOwner(PetOwner owner); 
} 

Spring Data JPA пытается построить запрос магазина специфичного для имени методы запроса. Общий подход заключается в удалении данного набора хорошо известные префиксов (например find...By или get...By) от имени методы и разбором остальной части методы с использованием Property Expressions (например petOnwer, в вашем случае) и множестве Clauses как Top, Distinct, OrderBy. Эти выражения Property могут ссылаться только на прямое свойство управляемого объекта. В вашем случае, так как ваше имя собственности petOwner, вы не можете использовать owner или что-нибудь кроме petOwner. Вы можете узнать больше об этой концепции here.

+0

Хорошо. Работает. Не могли бы вы теперь объяснить, почему? Я думал, что это имя метода и не зависит от имени Bean – Adamo

+0

Спасибо. я понимаю – Adamo

Смежные вопросы