Java 使用Spring使用JPA/Hibernate向用户添加车辆的最简单方法

Java 使用Spring使用JPA/Hibernate向用户添加车辆的最简单方法,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,假设我在我的UserDAO课上有这个: @OneToMany(cascade=CascadeType.ALL, mappedBy="owner", fetch=FetchType.EAGER, orphanRemoval=true) private Set<Vehicle> vehicles = new HashSet<Vehicle>(); 这是最佳做法还是我遗漏了什么?我更喜欢直接保存新车的方法(当然,在设置车主属性之后) 优点: 1) 您的方法将强

假设我在我的UserDAO课上有这个:

@OneToMany(cascade=CascadeType.ALL, mappedBy="owner", fetch=FetchType.EAGER,         orphanRemoval=true)
private Set<Vehicle> vehicles = new HashSet<Vehicle>();

这是最佳做法还是我遗漏了什么?

我更喜欢直接保存
新车的方法(当然,在设置
车主
属性之后)

优点:

1) 您的方法将强制框架检查用户的所有属性,并将它们写回数据库,还将再次写入所有车辆

2) 它更具可读性,从某种意义上说,它更清楚地表明您的意图只是添加一辆新车


3) 如果您正在进行此更改,您甚至可能不需要从数据库中检索
用户
对象,如果您使用我更喜欢直接保存
新车
(当然,在设置
所有者
属性之后)

优点:

1) 您的方法将强制框架检查用户的所有属性,并将它们写回数据库,还将再次写入所有车辆

2) 它更具可读性,从某种意义上说,它更清楚地表明您的意图只是添加一辆新车


3) 如果您正在进行此更改,您甚至可能不需要从数据库中检索
用户
对象,如果您使用

,您通常希望从关系的(JPA定义的)依赖方以及依赖类中管理双向关联。伪代码:

class User {
    private Set<Vehicle> vehicles;

    public void addVehicle(Vehicle vehicle) {
        if(vehicle == null) return;

        vehicle.setOwner(this);
        vehicles.add(vehicle);
    }

    public void removeVehicle(Vehicle vehicle) {
        if(vehicle == null) return;

        if(vehicles.remove(vehicle)) {
            vehicle.setOwner(null);
        }
    }
}
类用户{
私家车;
公共车辆(车辆){
如果(车辆==null)返回;
车辆所有人(本);
车辆。添加(车辆);
}
公共无效清除车辆(车辆){
如果(车辆==null)返回;
if(车辆.拆卸(车辆)){
vehicle.setOwner(空);
}
}
}

在实体之外管理关系会导致错误和重复代码。

您通常希望从关系的(JPA定义的)依赖方以及依赖类内部管理双向关联。伪代码:

class User {
    private Set<Vehicle> vehicles;

    public void addVehicle(Vehicle vehicle) {
        if(vehicle == null) return;

        vehicle.setOwner(this);
        vehicles.add(vehicle);
    }

    public void removeVehicle(Vehicle vehicle) {
        if(vehicle == null) return;

        if(vehicles.remove(vehicle)) {
            vehicle.setOwner(null);
        }
    }
}
类用户{
私家车;
公共车辆(车辆){
如果(车辆==null)返回;
车辆所有人(本);
车辆。添加(车辆);
}
公共无效清除车辆(车辆){
如果(车辆==null)返回;
if(车辆.拆卸(车辆)){
vehicle.setOwner(空);
}
}
}

在实体之外管理关系会导致错误和重复代码。

@JBNizet-true。尽管我一直讨厌这种反向的、面向db的术语。将更新答案。我有一个
UserService
类,它调用
UserRepository
类中的持久性方法(继承自
JpaRepository
)。My
User
类是.domains包中的一个单独类。因为我是java新手:当我的业务逻辑在服务中,并且我有单独的数据类时,您的建议如何适用于此场景?或者换句话说:我如何将我的用户对象传递给我的服务类?@MartinLundberg-我认为这是一个不相关(而且有点模糊)的问题。最好是你再发一篇SO帖子,用代码清楚地说明你想做什么。@JBNizet-true。尽管我一直讨厌这种反向的、面向db的术语。将更新答案。我有一个
UserService
类,它调用
UserRepository
类中的持久性方法(继承自
JpaRepository
)。My
User
类是.domains包中的一个单独类。因为我是java新手:当我的业务逻辑在服务中,并且我有单独的数据类时,您的建议如何适用于此场景?或者换句话说:我如何将我的用户对象传递给我的服务类?@MartinLundberg-我认为这是一个不相关(而且有点模糊)的问题。最好是你再发一篇SO帖子,用代码清楚地说明你想做什么。