JpaRepository 接口 - 未找到 属性 所有者
JpaRepository Interface - No property owner found
尽管我认为一切正常,但我遇到了一个奇怪的错误。
宠物class:
@Entity
public class Pet {
@Id
@GeneratedValue
private long id;
....
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "owner_id")
private PetOwner petOwner;
}
宠物主人
@Entity(name = "pet_owner")
public class PetOwner extends User{
...
@OneToMany(cascade = CascadeType.ALL,mappedBy = "petOwner")
private List<Pet> pets;
}
宠物仓库
@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!
为什么会出现这个错误?
由于您将字段命名为 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
(例如 [=17] 解析方法的其余部分=],在你的情况下)和一组 Clauses
,如 Top
、Distinct
、OrderBy
。那些 属性 表达式只能引用被管理实体 的 直接 属性。在你的情况下,因为你的 属性 名称是 petOwner
,你不能使用 owner
或 petOwner
以外的任何东西。您可以阅读有关此概念的更多信息 here。
尽管我认为一切正常,但我遇到了一个奇怪的错误。
宠物class:
@Entity
public class Pet {
@Id
@GeneratedValue
private long id;
....
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "owner_id")
private PetOwner petOwner;
}
宠物主人
@Entity(name = "pet_owner")
public class PetOwner extends User{
...
@OneToMany(cascade = CascadeType.ALL,mappedBy = "petOwner")
private List<Pet> pets;
}
宠物仓库
@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!
为什么会出现这个错误?
由于您将字段命名为 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
(例如 [=17] 解析方法的其余部分=],在你的情况下)和一组 Clauses
,如 Top
、Distinct
、OrderBy
。那些 属性 表达式只能引用被管理实体 的 直接 属性。在你的情况下,因为你的 属性 名称是 petOwner
,你不能使用 owner
或 petOwner
以外的任何东西。您可以阅读有关此概念的更多信息 here。