保存内部实体的最佳做法

时间:2018-12-06 21:35:57

标签: java spring jpa


Driver可以有一个User,但不需要。关联是无向的。

class Driver {
    private String firstName;
    private String lastName;

    @OneToOne
    private User user;

    // ...
} 

class User {
    private String login;
    private String email;

    // ...
} 

用例:
1.为Driver创建UserDriver
2.为User分配另一个Driver

哪种解决方案是最好的?

使用案例1:

选项1:

使用1个json创建DriverUser

{
    "DriverDto": {
        "firstName": "Adam",
        "lastName": "Kowalski",
        "UserDto": {
            "login": "mylogin",
            "email": "myemail@com.pl"
        }
     }
}

然后服务检查是否存在使用此登录名的User(如果不存在),然后保存。下一服务将User分配给Driver并保存Driver

选项2:

首先创建User

{
     "UserDto": {
            "login": "mylogin",
            "email": "myemail@com.pl"
        }
}

然后创建Driver并将User传递给Driver仅凭User的ID:

{
    "DriverDto": {
        "firstName": "Adam",
        "lastName": "Kowalski",
        "UserDto": {
            "id": 1
        }
     }
}

使用案例2:

选项1:

要将其他用户分配给驱动程序,必须使用json发出放置请求:

{
    "DriverDto": {
        "firstName": "Adam",
        "lastName": "Kowalski",
        "UserDto": {
            "login": "anotherlogin",
            "email": "anotheremail@com.pl"
        }
     }
}

然后服务检查用户是否存在(如果不存在),然后将其保存并为驱动程序设置新用户并保存新驱动程序。

选项2:

与方法1类似,但我们不传递整个User,而是仅传递User的ID:

 {
    "DriverDto": {
        "firstName": "Adam",
        "lastName": "Kowalski",
        "UserDto": {
            "id": 2
        }
     }
}

选项3:

发出新的http请求:
...api/drivers/id=1/assignuser/id=1

选项4:

发出新的http请求:
...api/drivers/id=1/assignuser 并在json中传递User的ID:

{
    "UserDto": {
        "id": 1
    }
}

0 个答案:

没有答案