我正在创建一个Spring应用程序,允许用户根据Google的Places和Maps API搜索社区及其评分。我添加了一个功能,允许用户点击一个按钮,并将搜索到的当前位置的纬度,经度,地址和等级保存到他们的个人资料中。他们可以根据自己的意愿保存多个区域。现在,我试图只传递一个字符串地址,一个双纬度和双倍经度,当我让它正常工作时会担心评级。
为了做到这一点,我在User实体中的User对象和Area对象之间创建了一个连接表。
private List<Area> savedAreas;
.....
@ManyToMany
@JoinTable(name = "user_area", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "area_id"))
public List<Area> getSavedAreas() {
return savedAreas;
}
public void setSavedAreas(List<Area> savedAreas) {
this.savedAreas = savedAreas;
}
我尝试通过User实体类中的以下方法向当前登录的用户添加一个区域对象,稍后我将在控制器类中调用它。
public void addArea(Area area) {
savedAreas.add(area);
}
连接表显示在MySQL提示符中但返回“空集(0.00秒)”
客户端的保存按钮将在控制器类中调用以下方法,该方法将从客户端接收从Ajax查询传递的数据并将其存储到变量中。
@RequestMapping(value = "/saveAreaToProfile", method = RequestMethod.POST)
public @ResponseBody String saveAreaToProfile(Area area, @RequestParam("latitude") double latitude,@RequestParam("longitude") double longitude,
@RequestParam("areaName") String areaName) {
// This is a way of authenicating the current user to create a session
Authentication loggedInUser = SecurityContextHolder.getContext().getAuthentication();
String username = loggedInUser.getName();
User user = userRepository.findByUsername(username);
// Saving the area to the db before I save it to the join table
areaRepository.save(area);
// Attempting to save the area to the user's area list which should, in theory, populate the join table?
user.addArea(area);
return "/";
}
我已经排除了许多System.out.println()
调试器的简洁性,它们在eclipse控制台中打印数据值以确保一切正常。纬度,经度,地址变量以及保存到数据库的经过身份验证的用户名和区域都可以正确打印。唯一的问题是区域和用户之间的连接表返回一个空集?