首页 > 解决方案 > JPA 中多对多映射的 POST JSON 主体应该是什么?

问题描述

假设我有两个实体 User.java 和 Topic.java

@Entity
@Table(name="T_USR")
@Getter
@Setter
public class User {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="USR_ID", updatable=false, nullable=false)
    private Long userId;

    @Column(name="FST_NM", nullable=false)
    private String firstName;

    @Column(name="LST_NM")
    private String lastName;

    @Column(name="EMAIL")
    private String email;

    @Column(name="CREATED_DT")
    @CreationTimestamp
    private Date createdDate;

    @ManyToMany
    @JoinTable(name="T_USR_TOPIC",
            joinColumns= { @JoinColumn(name="USER_ID") },
            inverseJoinColumns= { @JoinColumn(name="TOPIC_ID") })
    private Set<Topic> topics;
}
@Entity
@Table(name="T_TOPIC")
@Getter
@Setter
public class Topic {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="TOPIC_ID",updatable=false, nullable=false)
    private Long topicId;

    @Column(name="TOPIC_TAG")
    private String topicName;

    @Column(name="TOPIC_DS")
    private String topicDesc;

    @ManyToMany(mappedBy="topics")
    private Set<User> users;
}

我在 T_TOPIC 表中已经有几个条目说
TOPIC_ID | TOPIC_DS | TOPIC_TAG
1 | 用户界面 | 角
2 | 爪哇 | 春天

我想注册一个新用户。但是如何形成 JSON 主体呢?应该像

{
"firstName": "Myname",
"lastName": "LastName",
"email": "example@example.com",
"interests": [1,2]
}

请求对象。

@Getter
@Setter
public class UserRequest {

    @NotBlank
    @JsonProperty
    private String firstName;

    @Email
    @NotBlank
    @JsonProperty
    private String lastName;

    @NotBlank
    @JsonProperty
    private String email;

    @JsonProperty("interests")
    Set<Long> topics;

}

另外,使用双向多对多映射是个好主意吗?

标签: javajpaspring-data

解决方案


推荐阅读