- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个“宠物”域和一个“人”域,一个人可能有一只宠物。在我的 RestController 上使用 QuerydslPredicate,我想仅返回拥有“DOG”类型宠物的人。
Pet.java
@Entity
public class Pet {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
@Enumerated(EnumType.STRING)
@Column(nullable = false, name = "animal_type")
private AnimalType type;
// constructors & getters/setters
}
enum AnimalType {
DOG, CAT
}
Person.java
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String surname;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
@JoinColumn(name = "pet_id")
private Pet pet;
// constructors & getters/setters
}
PersonController.java
@RestController
@RequestMapping("persons")
public class PersonController {
@Autowired
private PersonRepository personRepository;
@GetMapping
public List<Person> getAll(@QuerydslPredicate(root = Person.class) Predicate predicate)
{
return (List<Person>) personRepository.findAll(predicate);
}
}
PersonRepository.java
public interface PersonRepository extends JpaRepository<Person, Long>, QuerydslPredicateExecutor<Person> {
}
我只想通过如下 GET 请求查询养狗的人:
localhost:8080/persons?pet.type=DOG
但这会导致以下错误:
{
"timestamp": "2019-04-09T18:11:23.430+0000",
"status": 500,
"error": "Internal Server Error",
"message": "Could not access method: Class org.springframework.util.ReflectionUtils can not access a member of class com.example.demo.domain.QPerson with modifiers \"protected\"",
"path": "/persons"
}
尽管使用localhost:8080/persons?name=Tom
查询名为“Tom”的人效果很好。
我有这个仓库可用 here .
我已经尝试过 this 的解决方案, this , this ,和this stackoverflow 问题,但还无法使其工作。
最佳答案
只需将 pom.xml
中的 querydsl.entityAccessors
属性更改为 false
(或将其删除,默认值为 false
)。
为什么会发生这种情况?
在您的 pom.xml
中,您具有以下配置:
<querydsl.entityAccessors>true</querydsl.entityAccessors>
此选项会使您的关系在类中创建为 protected 方法,因此会出现错误 ( https://github.com/querydsl/querydsl/blob/master/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java#L211 )。
if (config.useEntityAccessors()) {
writer.protectedField(queryType, field.getEscapedName());
} else {
writer.publicFinal(queryType, field.getEscapedName());
}
关于java - 如何使用 QuerydslPredicate 按子对象属性进行过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55599767/
我试图了解如何使用 @QuerydslPredicate 但我的测试 API 在调用时失败了: Servlet.service() for servlet [dispatcherServlet] in
我有许多具有相同方法的 Controller ,区别仅在于实体类。 我想创建通用的 BaseController 并且在使用 QuerydslPredicate 注释时遇到问题(无法设置根,这是通用的
我有一个“宠物”域和一个“人”域,一个人可能有一只宠物。在我的 RestController 上使用 QuerydslPredicate,我想仅返回拥有“DOG”类型宠物的人。 Pet.java @E
使用的库 Spring Boot 1.3.2.RELEASE 查询DSL 3.7.2 QueryDSL Maven 插件 1.1.3 hibernate 4.3.11.Final 问题 目前,我有一个
我正在按照这里的 spring 文档中的建议使用 @QuerydslPredicate 。 QueryDSL web support当我运行 Web 应用程序时一切正常。但是对于我使用时的测试用例 M
我正在创建一个端点,它将接收日期以在服务器端进行一些过滤。代码如下所示: @RequestMapping(value = "/invoices", method = RequestMethod.GET
我是一名优秀的程序员,十分优秀!