我正在使用一个JPA查询,它使用一个规范来检索实体。当我执行查询时,我得到了一个错误:
组织。springframework。数据映射。PropertyReferenceException:找不到类型任务的属性名称!
我已经查看了之前在该网站上提出的类似问题的答案
当我使用调试器逐步检查代码时,条件生成器中的扩展路径将返回嵌入的ID类,但当规范实际用于查询时,该属性似乎正在应用于基本实体类。
我是否遗漏了一些明显的东西?
这是实体类:
@Entity
@Table(name = "TASKS")
public class Task implements Serializable {
@EmbeddedId
private TaskId id;
...more attributes, getters and setters
}
以下是嵌入式ID实体类:
@Embeddable
public class TaskId implements Serializable {
@Column(name = "NAME", length = 100)
private String name;
...more attributes, getters and setters
}
以下是与嵌入id“name”属性匹配的规范生成器:
public class HasTaskNameSpec {
private HasTaskNameSpec() {
}
public static Specification<Task> equals(String name) {
return (root, query, criteriaBuilder) -> {
return criteriaBuilder.equal(root.get("id").get("name"), taskName);
};
}
}
查询在存储库上执行,如下所示:
List<Task> results = taskRepository.findAll(HasTaskNameSpec.equals("foo"));
存储库本身非常简单:
public interface TaskRepository extends JpaRepository<Task, TaskId>, JpaSpecificationExecutor<Task> {
List<Task> findByIdName(String name);
Page<Task> findByIdName(String name, Pageable page);
}
**按照以下建议编辑添加到存储库的方法**
看看这个链接,它有一个类似的查询。
嵌入ID查找
最后的答案建议您可以向TaskRepository添加一个方法。
public interface TaskRepository extends JpaRepository<Task, TaskId>, JpaSpecificationExecutor<Task> {
public List<Task> findByIdName(String name);
}
'根目录。获取({embeddedIdName})。get({subpertyname})”用于使用规范查询embeddedId。
@Embeddable
public class ProjectId implements Serializable{
private static final long serialVersionUID = 1L;
@Column(name = "PROJECT_NAME")
private String projectName;
@Column(name = "ORGANIZATION")
private String organization;
......
......
}
@Entity
@Table(name = "projects")
public class Project {
@EmbeddedId
private ProjectId projectId;
@Column(name = "STARTED_TIME")
private Timestamp startedTime;
@Column(name = "ACTIVE")
private String active;
@Column(name = "DESCRIPTION")
private String description;
......
......
}
在上面的代码段中,ProjectId是一个嵌入式id。要查询projectName,我们应该使用下面的代码段。
expression = root.get("projectId").get("projectName");
演示应用程序链接。
啊,根本原因完全在我们的代码库中。页面上指定了一个不包含嵌入“id”属性的排序顺序。上面的代码有效。
我使用spring jpa规范动态构建实体查询。 它工作完美,但是查询返回所有实体字段,这使得性能变慢。我只想获取特定的实体字段,而不是获取我不想要也不会使用的所有实体字段和依赖项。 我在网上搜索,尝试了一些场景,但没有任何不足。有人能就此提出任何解决方案吗? 提前感谢 这是我的。我正在使用spring boot 2.2.4 规格: 存储库: 音乐会服务: ConcertServiceImpl:
我有下面的查询,其中两个表连接在非主列上。该表连接到一个公用列上。 用户详细信息 如何在JPA规范中实现相同的查询
有一个使用属性表达式的查询:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-方法。查询属性表达式: 试图通过规范执行查询: 我得到了一个错误: 我做错了什么或忘记添加了什么? 查询:按教师姓名显示所有学生 基地实体: 实体教师: 实体学生: 实体教室: 实体教室:
我不能同时使用Spring Data,JPA投影和规范。我有以下设置: 实体: 投影界面: 国家规格: 存储库: 前两个方法findByName和findAllProjectedBy工作良好。而第三个方法findAllProjectedBy(Specification Specification)抛出以下异常- 如何才能做到这一点呢?有什么想法吗?
我正在尝试获取员工的详细信息,其雇员类型是职员,其加入日期是最近的一个。 SQL Server 2008中的查询如下所示: 提前致谢
我有jpa存储库: 和客户规范 通常我是这样取记录的 现在我想按组计算 其中(复杂规范中的标准)按字段1、字段2、字段3分组; 如上所述,如何使用jpaRepository和Custom规范执行此GROUP BY和COUNT 注意:我可以像这样做完整计数 帮助我分组和计数。提前谢谢。