gpt4 book ai didi

java - MVC Spring Boot 与 JPA 的关系

转载 作者:行者123 更新时间:2023-11-30 08:33:45 25 4
gpt4 key购买 nike

我对 MVC SpringBoot 应用程序中的 JPA 关系有疑问。

我正在尝试创建一个应用程序,我有很多用户,每个用户都可以拥有多辆汽车。一个用户可以拥有多辆汽车。我在用户和汽车对象之间建立了@OneToOne 关系,这是我所做的:

这是用户类:

@Entity
@Table(name = "user")
public class User implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

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

@Column(name = "password", length = 500, nullable = false)
private String password;

@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<Car> cars;

}

然后这是 Car 类:

@Entity
@Table(name = "car")
public class Car implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@Column(length = 11)
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

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

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

@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "id")
private User user;

}

然后,这里是实际的服务实现

@Component
@Transactional(readOnly = true)
public class CarServiceImpl implements CarService {

@Inject
private CarRepository carRepository;

@Inject
private UserRepository userRepository;

@Override
@Transactional(readOnly = false)
public Car addCar(Long userId, Car car) {
User user = userRepository.findOne(userId);
user.getGpsLocationModels().add(car);

car.setUser(user);
carRepository.save(car);

return car;
}

然后我有了端点,但它可以正常工作。 add 方法看起来确实按预期工作,至少我得到了预期的输出,但是我不知道如何编写 find 方法,也不知道如何根据用户检索汽车,我知道如何通过他们的 ID 获取他们,但不是为每个用户单独获取。

这是我的尝试:

@Override
public Car findCar(Long userId, Long carId) {

//get the current user (that comes as JSON Request Param)
User user = userRepository.findOne(userId);

//get the car based on its ID, here's the problem, I want the car based on its ID AND its user, I can't display cars which aren't for that particular user
Car car = carRepository.findOne(carId);

return car;
}

这是为特定用户获取所有汽车的方法:

@Override
public List<Car> displayAllCars(Long userId) {
return userRepository.findOne(userId).getCars();
}

如果您能提供任何帮助,我将不胜感激。

非常感谢

最佳答案

您的映射不正确。汽车 > 用户是@ManyToOne。如果您也将其设为双向,则您还可以通过用户检索汽车:

@Entity
@Table(name = "user")
public class User implements Serializable {

@OneToMany(mappedBy ="user",cascade = CascadeType.ALL)
private Set<Car> cars;

public Set<Car> getCars(){
return cars;
}

public void addCar(Car car){
cars.add(car);
car.setUser(this);
}
}

@Entity
@Table(name = "car")
public class Car implements Serializable {

@ManyToOne(fetch=FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name="user_id")
private User user;
}

@Override
public Set<Car> findCars(Long userId) {
return userRepository.findOne(userId).getCars();
}

关于java - MVC Spring Boot 与 JPA 的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39277137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com