当前位置: 首页 > 知识库问答 >
问题:

spring数据-按具有不同命名的复合主键排序

唐炳
2023-03-14

我有一个实体,其复合主键定义为

@Embeddable
public class EntityPk {

    @Column(updatable = false, nullable = false)
    Long theNum;

    @Column(updatable = false, nullable = false)
    Type theType;
}

和实体

@Entity
@Table(name = "entityXyz")
@EntityListeners(AuditingEntityListener.class)
@DynamicUpdate
@DynamicInsert
public class Entity {

    @EmbeddedId
    EntityPk pk;

    @Column(nullable = false)
    String something;
....
}

我们有一个前端应用程序发送以下请求

{
    ...
    "sort": {
        "field": "theNum",
    }
    ...
}

它在调用pageable with sort参数之后:

repository.findAll(spec, pageable)

失败,使用

PropertyReferenceException:未找到类型Entity的属性theNum!

通过发送正确的请求(如:

{
    ...
    "sort": {
        "field": "pk.theNum", // notice the added prefix "pk."
    }
    ...
}

最后,我的问题是--有没有一种方法可以告诉spring将收到的“thenum”排序参数正确地作为复合主键的一部分来处理?

或者我应该要么a)从前端更改请求,要么b)为实体编写自定义转换器?

共有1个答案

公西俊能
2023-03-14

最后,我编写了一个简单的转换器,它检查查询应排序的字段的名称,并将其前置

PK.

它的名字。不过,有一点--为了确保比较的是正确的字段名,应该使用静态元模型生成器,比如

https://docs.jboss.org/hibernate/orm/5.4/topical/html_single/metamodelgenerator.html

虽然在使用Springframework Page对象时,这是一个更优雅的解决方案,但不向前端公开具有复合主键的实体的路径

 类似资料:
  • 我使用spring数据rest作为CRUD。但是当实体具有复合主键时,我不知道如何通过给出主键来获得一个实体。 河流等级: RiverPK类: Riverdoo级: 然后我可以通过调用get http://localhost:8080/river/获取河流数据,还可以通过调用post http://localhost:8080/river/{river json}为db创建新的实体 river j

  • 问题内容: 我使用spring数据休息作为基础。但是当实体具有复合主键时,我不知道如何通过提供主键来获得实体。 河类: RiverPK课程: RiverDAO类: 然后,我可以通过调用get http:// localhost:8080 / river / 获取河流数据,还可以通过调用post http:// localhost:8080 / river / {river json} 为db创建新

  • 问题内容: 我有一个这样的表格: 需要以以下形式返回,重复项: 我尝试这样做,但这会返回类似 而且我需要重复的内容,但是当然不起作用。 有任何想法吗?谢谢。 问题答案: 您需要汇总ID。如果仅需要其中之一的ID(例如,删除),则可以执行以下操作: 如果您想同时使用两个ID,并且知道不会超过2个,则可以执行以下操作: 如果您想要所有重复项及其ID,则必须使用派生表,如Nitin Midha的回答。

  • 问题内容: 我需要一个表来存储一些评分,在此表中,我有一个 综合索引(user_id,post_id) 和其他列来标识不同的评分系统。 在此表中,我没有 主键, 因为 主键 必须是唯一的,而INDEX不必是唯一的,就我而言,唯一性是一个问题。 例如我可以有 缺少PRIMARY KEY可能会导致性能问题?我的表结构好还是需要更改? 谢谢 问题答案: 几点: 听起来您只是在使用表的当前唯一特性,并将其

  • 我想根据两个属性按升序对数组进行排序。 我有以下数据数组,看起来像 我想把它排序成 我想根据属性按升序对数组进行排序,如果多个项目存在相同的,那么我想根据属性的对其进行排序。 我在这里面临的问题是,< code>subCode在字符串中,< code>code在数字中。我尝试使用< code>array.sort并解析整数形式的< code>subCode,但它返回了我不理解的不同数字。

  • 我在oracle数据库中有一个包含客户数据的表。以下是一个简化的定义: 此表的主键是。 该表有许多行,其中为空。在数据库级别,没有问题,但是当我试图通过JPA实体访问这些行时,会导致一些问题: 1:使用