【问题标题】:Spring Data REST convert/show EmbeddedId including ManyToOneSpring Data REST 转换/显示 EmbeddedId,包括 ManyToOne
【发布时间】:2016-12-19 11:32:37
【问题描述】:

我有一个关于 Spring Data REST 项目的问题。

我的模型包括两个带有 EmbeddedIds 的表。 第一个表 (name=B) 由两个整数组成。 第二个表(name=A)由一个简单的 FK 和 B 的模型(包括 EmbeddedId)组成。

现在,如果我请求表 B,我将获得这两个 ID。 但是,如果我向表 A 发出请求,我将无法获得 ID。..

所以我重写了我的 EmbeddedId 类中的 toString() 方法,以至少返回 URI 链接中的 ID。

我阅读了有关 BackendIdConverter 或 Spring core.converter 的信息并尝试正确转换 ID,但我无法达到我的目标(出现错误)。所以现在,我需要你的帮助!

为了完全理解我的问题,这是我的结构(作为演示):

@Embeddable
public class IDsFromA implements Serializable {

    @ManyToOne
    @JoinColumn(name="cID")
    private C c;

    @ManyToOne
    @JoinColumns({
        @JoinColumn(name="b_1", referencedColumnName="b_1"),
        @JoinColumn(name="b_2", referencedColumnName="b_2")
    })
    private B b;
}

@Embeddable
public class IDsFromB implements Serializable {

    private int b_1;
    private int b_2;
}

@Entity
public class A {

    @EmbeddedId
    private IDsFromA idsFromA;

    // ...
}

@Entity
public class B {

    @EmbeddedId
    private IDsFromA idsFromA;

    // ...
}

@Entity
public class c {

    @Id
    private int cID;

    // ...
}

【问题讨论】:

    标签: spring spring-data spring-data-rest many-to-one embeddable


    【解决方案1】:

    Jackson JSON 序列化器默认也会序列化任何公共的 get..() 方法。因此,您可以简单地添加几个方法来返回相关数据,并且值应该在响应中:

    例如

    @Entity
    public class A {
    
        @EmbeddedId
        private IDsFromA idsFromA;
    
        public int getValueOne(){
            return idsFromA.getB().getIdsFromB().getB_1();
        }
    
         public int getValueTwo(){
            return idsFromA.getB().getIdsFromB().getB_2();
        }
    }
    

    【讨论】:

    • 我在几个小时前通过设置 BackendIdConverter 解决了这个问题。但是在隐藏转换器并尝试使用您的选项后,我注意到 ID 已经显示,因此我现在无法测试您的答案,但会在另一个项目中进行。不过谢谢你的回答!
    • @Phil,你能添加你的答案吗?
    • 我将在大约 10 分钟内将其推送到 github 项目。 5-6小时。可以吗?
    猜你喜欢
    • 2014-12-02
    • 1970-01-01
    • 2016-08-02
    • 2014-11-02
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2016-04-17
    相关资源
    最近更新 更多