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

具有复合主键的spring数据Rest

鲜于河
2023-03-14

我使用spring数据rest作为CRUD。但是当实体具有复合主键时,我不知道如何通过给出主键来获得一个实体。

河流等级:

@Entity
public class River {
    private RiverPK id;
    private Double length;
    private Timestamp date;
    private String comment;


    @Basic
    @Column(name = "length")
    public Double getLength() {
        return length;
    }

    public void setLength(Double length) {
        this.length = length;
    }

    @Basic
    @Column(name = "date")
    public Timestamp getDate() {
        return date;
    }

    public void setDate(Timestamp date) {
        this.date = date;
    }

    @Basic
    @Column(name = "comment")
    public String getComment() {
        return comment;
    }

    public void setComment(String comment) {
        this.comment = comment;
    }

    @Id
    public RiverPK getId() {
        return id;
    }

    public void setId(RiverPK id) {
        this.id = id;
    }
}

RiverPK类:

@Embeddable
public class RiverPK implements Serializable {
    private String name;
    private int upcode;
    private int downcode;

    @Column(name = "name")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Column(name = "upcode")
    public int getUpcode() {
        return upcode;
    }

    public void setUpcode(int upcode) {
        this.upcode = upcode;
    }

    @Column(name = "downcode")
    public int getDowncode() {
        return downcode;
    }

    public void setDowncode(int downcode) {
        this.downcode = downcode;
    } 

}

Riverdoo级:

@RepositoryRestResource(path = "river")
public interface RiverDAO extends JpaRepository<River, RiverPK> {
}

然后我可以通过调用get http://localhost:8080/river/获取河流数据,还可以通过调用post http://localhost:8080/river/{river json}为db创建新的实体

river json是:

id": {

    "name": "1",
    "upcode": 2,
    "downcode": 3

},
"length": 4.4,
"date": 1493740800000,
"comment": "6"
}

在spring数据rest文档中,应该可以调用get localhost:8080/river/1(主键)来获取主键为1的实体。当实体只有一个主键时,这可以起作用。但我的实体river具有复合主键RiverPK。如果我调用get localhost:8080/River/{name='1',upcode=2,downcode=3},它返回一个错误“No converter found cable of converting from type[java.lang.String]到type[com.example.db.entity.RiverPK]”,我的意思是spring使用{name='1',upcode=2,downcode=3}作为字符串,而不是RiverPK类型。

问题是如何用复合主键调用get\put\delete作为其他普通实体?

共有1个答案

庾鸿飞
2023-03-14

有一个jira问题,您可以查看:https://jira.spring.io/browse/datarest-598

这个评论对你来说可能特别有趣

https://jira.spring.io/browse/datarest-598?focusedcommentid=117740&page=com.atlassian.jira.plugin.system.issueTabpanels:comment-tabpanel#comment-117740

在那里,您还可以找到一个指向示例项目的github链接。它使用BackendIdConverter将复合键转换为字符串并返回。所以诀窍是将您的复合id转换为一个可以用作路径段的字符串。

这个答案您可能也会感兴趣https://stackoverflow.com/a/31830586/5371736

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

  • 我有一个实体,其复合主键定义为 和实体 我们有一个前端应用程序发送以下请求 它在调用pageable with sort参数之后: 失败,使用 PropertyReferenceException:未找到类型Entity的属性theNum! 通过发送正确的请求(如: 最后,我的问题是--有没有一种方法可以告诉spring将收到的“thenum”排序参数正确地作为复合主键的一部分来处理? 或者我应该

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

  • 我在使用聚合框架从MongoDB读取文档时遇到了问题:我的结果中总是得到空ID。这只发生在具有复合ID的文档中。我尝试了各种版本的spring-data-mongob(1.10.12, 2.0.7),结果相同。 实体定义类 测试代码 输出 调试到以下方法MappingMongoConverter。read(final mongopersistenentity entity、final Docume

  • 我们想用雄辩的ORM和Laravel 5实现复合主键http://www.mbarendezvous.com/ 据我所知,它目前还没有得到雄辩者的支持。请建议最好的替代方案。

  • 我有一个实体,它的复合主键由两个字段组成,其中一个也是复合外键的一部分。 背景:我有实体<代码>人员 、<代码>区域 和<代码>会话 。 与具有多对多关系,使用称为“和实体。 所以,我有,主键为(,)。本身是的外键。 也有一个字段。我希望(,)是的复合外键。 我的PersonSession代码: } 这看起来不错,它在数据库中创建了所有正确的关系。当我尝试插入个性化会话对象时,问题就出现了——ar