![](/img/trans.png)
[英]Insert order of JPA entity with compound EmbeddedId (an EmbeddedId that contains another EmbeddedId)
[英]Spring mvc @RequestBody how to parse JPA Entity with @EmbeddedId
我有2個實體:User和UserAlias。 用戶有復合PK。 我有一些疑問:
如何解析Spring MVC控制器中的JSON以填充User和UserPK對象,例如使用以下數據:
{“id”:1,“name”:“newUser”,“aliases”:[“alias1”,“alias2”,“alias3”]}
如果我寫public void createUser(@RequestBody User user)
我顯然會得到一個例外。
如何編寫我的控制器方法來解析數據到兩個實體?
User.java
@Entity
@Table(name = "user")
public class User {
@EmbeddedId
private UserPK userid;
public User(){}
public User(UserPK userid) {
this.userid = userid;
this.aliases = aliases;
}
@OneToMany(
mappedBy = "user",
cascade = CascadeType.ALL,
orphanRemoval = true
)
public List<UserAlias> aliases = new ArrayList<>();
}
UserPK.java
@Embeddable
public class UserPK implements Serializable {
@NotNull
@Column(name = "id")
private Integer id;
@NotNull
@Column(name = "name")
private String name;
public UserPK(){};
public UserPK(Integer id, String name){
this.id = id;
this.name = name;
}
}
UserAlias.java
@Entity
@Table(name = "user_alias")
public class UserAlias {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Integer id;
@Column(name = "user_alias")
private String userAlias;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(
referencedColumnName = "id"),
@JoinColumn(
referencedColumnName = "name")
})
@JsonIgnore
public User user;
public UserAlias(){}
public UserAlias(String userAlias) {
this.userAlias = userAlias;
}
1.第一個問題:
如何在Spring MVC控制器中解析JSON以填充User和UserPK對象?
那么你的JSON必須與你的實體結構相匹配,所以你需要在User
對象中有一個UserId
對象才能匹配預期的結構。 在您的情況下,您共享的JSON將不匹配,並且在傳遞給Spring Controller時將拋出異常。
這就是你需要的JSON:
{ "userid": {"id" : 1, "name" : "newUser"}, "aliases": [ "alias1", "alias2", "alias3" ] }
2.第二個問題:
現在我正在使用DTO對象用@RequestBody解析JSON並填充模型。 但我不確定這是完成這項任務的好方法嗎?
是的,這是一種使用DTO
的好方法,特別是如果你不想保持你現在使用的相同JSON
結構,並且使用傳遞的DTO
你可以分別構造你的User
對象。
@JsonUnwrapped
注釋 : 如果你想避免使用DTO
,你可以使用Jackson的@JsonUnwrapped
注釋和userId
字段,這樣它的屬性將被序列化為User
類的屬性,你的第一個JSON
將被接受。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.