假设我有以下商业模式:
用户最多拥有 n 个 Vehicles。
这是我的DAO /用户域类:
@Entity
@Table(name="USER")
public @Data class User extends AbstractPersistable<Long> {
@OneToMany(cascade=CascadeType.PERSIST, mappedBy="owner")
private Set<Vehicle> vehicles = new HashSet<Vehicle>();
}
这是车辆类:
@Entity
@Table(name="VEHICLE")
public @Data class Vehicle extends AbstractPersistable<Long> {
@ManyToOne(optional = false)
@JoinColumn(name = "user_id")
User owner;
}
我希望能够像这样为新用户保存新车辆:
User user = new User();
user.setName("Fred"); // other setters omitted
Vehicle vehicle = new Vehicle();
vehicle.setEngine("..."); // other setters omitted
user.getVehicles().add(vehicle);
userService.saveUser(user);
userService.saveUser()是一个服务层方法,被注释为@Transactional并调用 userRepository.save(user); (参见底部的 Repository 类的摘录)
现在有几个问题,因为我的解决方案没有按预期工作:
1.是否可以只保存用户对象并让用户对象内的 Vehicle-Set 自动持久化?
2.这是最佳实践吗?我知道用户是拥有实体。我希望在删除用户时删除用户的所有车辆。
3.或者我是否总是需要做一些类似vehicle.setOwner(user);的事情??
4.从您的角度来看,对此的最佳解决方案是什么?
我阅读了很多关于拥有实体和 JoinColumn/mappedBy 的内容。然而现在我比以前更困惑了。
此外,这是我的 UserRepository 的摘录:
import org.springframework.data.jpa.repository.JpaRepository;
import org.myproject.domains.User;
public interface UserRepository extends JpaRepository<User, Long> {
User findByLoginName(String loginName);
}