有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用Spring的RepositoryRestResource添加具有关系的新实体

所以我有User

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String username;
    private String password;
    @OneToOne
    private Email email;

    //getters setters, constructors
}

我有{},这是:

@Entity
public class Email {
    @Id
    @GeneratedValue
    private Integer id;
    private String address;

    //getters setters, constructors
}

它们都有自己的CrudRepository,用RepositoryRestResource注释

我的问题是:如果我想同时创建新用户和新电子邮件,以及与该用户的电子邮件关系,我应该向https://localhost:8443/users提供什么请求主体我尝试了这个,但它创建了一个新用户,其null电子邮件id为:

{
    "username" : "test",
    "password" : "test",
    "email" : {
        "address" : "olol@lol.kek"
    }
}

共 (1) 个答案

  1. # 1 楼答案

    想出来了

    下面是它的外观,用户:

    @Entity
    @NoArgsConstructor
    @AllArgsConstructor
    public class User {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Getter
        @Setter
        private Integer id;
    
        @Getter
        @Setter
        private String username;
    
        @Getter
        @Setter
        private String password;
    
        @OneToOne(cascade = CascadeType.ALL)
        @JoinColumn(name = "email_id")
        @Getter
        @Setter
        private Email email;
    }
    

    电子邮件:

    @Entity
    @NoArgsConstructor
    @AllArgsConstructor
    public class Email {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Getter
        @Setter
        private Integer id;
    
        @Getter
        @Setter
        private String address;
    
        @OneToOne(mappedBy = "email")
        @Getter
        @Setter
        private User user;
    
        public Email(String address) {
            this.address = address;
        }
    }
    

    问题是,您必须向这两个对象添加@OneToOne注释,并为依赖实体提供mappedBy等参数,为所有者提供@JoinColumn注释。此外,有必要为Email添加带有String参数的构造函数,以便在运行时调用它(我猜实际上它是“除id之外的所有构造函数)

    然后我在POST请求中将这个JSON发送到https://localhost:8443/users

    {
        "username" : "test",
        "password" : "test",
        "email" : "lolkek@cheburek.com"
    }
    

    它会在数据库中创建新用户,并为该用户创建一封带有该地址的新电子邮件