gpt4 book ai didi

java - 不在 Spring Data Rest 中获取 ManyToOne 热切关联

转载 作者:搜寻专家 更新时间:2023-10-31 20:11:33 25 4
gpt4 key购买 nike

我的 Spring Data 存储库被配置为默认的 @RepositoryRestResource,没有任何定制。

JPA 实体:

@Entity
@Table(name = "flat")
public class Flat implements Serializable {

private static final long serialVersionUID = -7402659216552976109L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "flat_id")
private Integer id ;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "house_id", referencedColumnName="house_id", insertable=false, updatable=false)
private House house;

@Column(name = "kad_num")
private String kadNum;

.....

我希望 House obkect 作为 Flat 对象的嵌入部分返回到 JSON 中,但只获取房子的 URL

/repository/flats/442991:

{
"kadNum" : "78:06:0002202:8981",
"sqrFull" : 52.7000,
"flatNum" : "311",
"_links" : {
"self" : {
"href" : "http://localhost:8080/kap/repository/flats/442991"
},
"house" : {
"href" : "http://localhost:8080/kap/repository/flats/442991/house"
}
}
}

同时,User-Role OneToMany 关系被很好地获取,角色名称:

@Entity
@Table(name = "\"user\"")
public class User {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
private Integer id;

private String login;

private String email;

private String password;

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "user_id", nullable=false , updatable = false, insertable = true)
private Set<Role> roles = new HashSet<Role>();
.....

请求:/repository/users/5

{
"id" : 5,
"login" : "op898",
"email" : "op20140603@gmail.com",
"password" : "c6172176f8f5d7e660eb4dcfad07a6ca",
"roles" : [ {
"roleName" : "OPERATOR"
} ],
"_links" : {
"self" : {
"href" : "http://localhost:8080/kap/repository/users/5"
}
}
}

除了关系类型之外,我无法找出区别。任何的想法 ?谢谢

最佳答案

好吧,我找到了原因,但仍然不明白是否可以配置。

对于用户角色关系,角色作为用户的嵌入式 JSON 对象返回,因为没有为角色实体定义存储库。但是 House 和 Flat 都有对应的 JpaRepository,并且 house 在 Flat JSON 对象中作为唯一的 URL 返回。似乎 Spring Data REST 总是在可以使用 REST 获取实体时自动用 JSON 中的 REST 链接替换实体。一旦我从项目中删除了 House 存储库,Flat 的 JSON 响应就变成了我想要的形式,带有嵌入式 House:

{
"house" : {
"streetFull" : "KIMa pr.",
"houseNum" : "1",
"kadNum" : "78:06:0002202:3072",
"building" : null,
"liter" : "В",
"sqrFull" : 10426.50,
"sqrRooms" : 12868.10
},
"kadNum" : "78:06:0002202:9051",
"sqrFull" : 43.8000,
"flatNum" : "421",
"_links" : {
"self" : {
"href" : "http://localhost:8080/kap/repository/flats/442987"
},
"flats" : {
"href" : "http://localhost:8080/kap/repository/flats/442987/flats"
}
}
}

但这不是解决方案,因为我还需要 Spring Data REST 存储库用于 House 实体。有任何想法吗 ?

关于java - 不在 Spring Data Rest 中获取 ManyToOne 热切关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24046856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com