如何使用包含关键字的 属性 创建 Spring JPA 存储库 findBy 查询?
How do you create a Spring JPA repository findBy query using a property that contains a keyword?
这是我的问题的一个简化示例。我有这个存储库和实体 class.
public interface ThingRepository extends JpaRepository<ThingEntity, Long> {
ThingEntity findByFooInAndBar(String fooIn, String bar);
}
@Entity
public class ThingEntity {
@Column(name="FOO_IN", nullable=false, length=1)
private String fooIn;
public String getFooIn() {
return fooIn;
}
public setFooIn(String fooIn) {
this.fooIn = fooIn;
}
/* not including bar property for brevity's sake */
}
Spring 抛出以下异常。
org.springframework.data.mapping.PropertyReferenceException: No property foo found for type ThingEntity!
貌似Spring采用了方法findByFooInAndBar
,认为foo
是我的属性名字,in
是匹配值的关键字在一个集合中。
如何理解 属性 名称是 fooIn
,而不是 foo
?
为了解决这个问题,我使用 @Query
注释手动定义了查询。如果其他人找到不需要手动查询的解决方案,我会很乐意接受他们的回答。
public interface ThingRepository extends JpaRepository<ThingEntity, Long> {
@Query("SELECT t FROM Thing t WHERE t.fooIn = ?1 AND t.bar = ?2")
ThingEntity findByFooInAndBar(String fooIn, String bar);
}
Spring 正在您的方法中解析 'In' 以创建查询。检查 link 以创建查询:您应该将变量的名称 fooIn
更改为 fooin
或类似的名称...
我仔细观察了代码,发现你的 return 不是 list
,而是 object
。
将该部分更改为 List<ThingEntity>
.
这是我的问题的一个简化示例。我有这个存储库和实体 class.
public interface ThingRepository extends JpaRepository<ThingEntity, Long> {
ThingEntity findByFooInAndBar(String fooIn, String bar);
}
@Entity
public class ThingEntity {
@Column(name="FOO_IN", nullable=false, length=1)
private String fooIn;
public String getFooIn() {
return fooIn;
}
public setFooIn(String fooIn) {
this.fooIn = fooIn;
}
/* not including bar property for brevity's sake */
}
Spring 抛出以下异常。
org.springframework.data.mapping.PropertyReferenceException: No property foo found for type ThingEntity!
貌似Spring采用了方法findByFooInAndBar
,认为foo
是我的属性名字,in
是匹配值的关键字在一个集合中。
如何理解 属性 名称是 fooIn
,而不是 foo
?
为了解决这个问题,我使用 @Query
注释手动定义了查询。如果其他人找到不需要手动查询的解决方案,我会很乐意接受他们的回答。
public interface ThingRepository extends JpaRepository<ThingEntity, Long> {
@Query("SELECT t FROM Thing t WHERE t.fooIn = ?1 AND t.bar = ?2")
ThingEntity findByFooInAndBar(String fooIn, String bar);
}
Spring 正在您的方法中解析 'In' 以创建查询。检查 link 以创建查询:您应该将变量的名称 fooIn
更改为 fooin
或类似的名称...
我仔细观察了代码,发现你的 return 不是 list
,而是 object
。
将该部分更改为 List<ThingEntity>
.