我正在使用 Thymeleaf HTML 注冊表單和簡單的保存/更新方法將“dish”物件保存/更新到 mySQL 資料庫。Restaurant Id 是“dish”的外鍵,但使用以下方法將其保存為“null”,
我想讓當前登錄的餐廳老板的餐廳 ID 在他們添加一道菜時自動保存。
有沒有簡單的方法來做到這一點?我在 Youtube 上找到的最接近的教程涉及在 Postman 中使用 JSON 請求,過去我在將其調整為 HTML 注冊表單時遇到了問題。
我對這一切都很陌生,因此非常感謝任何幫助!
見菜類:
package com.bron.demoJPA.appuser;
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ToString(exclude = "reqlist")
public class Dish {
@Id
@SequenceGenerator(name = "dish_sequence", sequenceName = "dish_sequence", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "dish_sequence")
@Column(name = "dish_Id")
private Long dishId;
@Column(name = "dish_name")
private String dname;
@Column(name = "dish_description")
private String description;
@Column(name = "dish_price")
private double price;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "Rest_ID", referencedColumnName = "Rest_ID")
private AppUser app;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "dish_requirment_mapping", joinColumns = @JoinColumn(name = "dish_Id", referencedColumnName = "dish_Id"), inverseJoinColumns = @JoinColumn(name = "Require_ID", referencedColumnName = "Require_ID"))
private List<Requirments> reqlist;
public void addRequirments(Requirments req) {
if (reqlist == null)
reqlist = new ArrayList<>();
reqlist.add(req);
}
}
見 AppUser(restaurant owner) 類
@Column(name = "Rest_Password")
private String password;
@Column(name = "Rest_Email_Address")
private String email;
@Enumerated(EnumType.STRING)
private AppUserRole appUserRole;
private Boolean locked = false;
// don't enable user until email verification
private Boolean enabled = false;
public AppUser(String restname, String email, String pass, AppUserRole app) {
this.restaurantName = restname;
this.email = email;
this.password = pass;
this.appUserRole = app;
}
public Collection<? extends GrantedAuthority> getAuthorities() {
SimpleGrantedAuthority authority = new SimpleGrantedAuthority(appUserRole.name());
return Collections.singletonList(authority);
}
@Override
public String getUsername() {
return email;
}
@Override
public String getPassword() {
return password;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return !locked;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return enabled;
}
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = true)
@JoinColumn(name = "openingHourID", referencedColumnName = "OpeningHour_ID")
private OpeningHour opening;
}
見控制器類:
package com.bron.demoJPA.conroller;
@Controller
public class DishController {
//display list of employees
@Autowired
private DishService dishService;
@GetMapping("/dish")
public String viewHomePage(Model model) {
model.addAttribute("listDish", dishService.getAllDish());
return "index";
}
@GetMapping("/showNewDishForm")
public String showNewDishForm(Model model) {
// Create model attribute to bind form data
Dish dish = new Dish();
model.addAttribute("dish", dish);
return "new_dish";
}
@PostMapping("/saveDish")
public String saveDish(@ModelAttribute("dish") Dish dish) {
// save dish to database
dishService.saveDish(dish);
return "redirect:/dish";
}
@GetMapping("/showFormForUpdate/{dishId}")
public String showFormForUpdate(@PathVariable(value = "dishId") long dishId, Model model) {
// get dish from service
Dish dish = dishService.getDishByDishId(dishId);
// set dish as model to pre-populate the form data
model.addAttribute("dish", dish);
return "update_dish";
}
}
查看服務實作
package com.bron.demoJPA.service;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.bron.demoJPA.appuser.Dish;
import com.bron.demoJPA.repository.DishRepository;
@Service
public class DishServiceImpl implements DishService {
@Autowired
private DishRepository dishRepository;
@Override
public List<Dish> getAllDish() {
return dishRepository.findAll();
}
@Override
public void saveDish(Dish dish) {
this.dishRepository.save(dish);
}
@Override
public Dish getDishByDishId(long dishId) {
Optional<Dish> optional = dishRepository.findById(dishId);
Dish dish = null;
if (optional.isPresent()) {
dish = optional.get();
} else {
throw new RuntimeException("Dish not found for: " dishId);
}
return dish;
}
}
見服務類
public interface DishService {
List<Dish> getAllDish();
void saveDish(Dish dish);
Dish getDishByDishId(long dishId);
}
uj5u.com熱心網友回復:
在嘗試保存之前,您能否確保 Dish 的“app”屬性設定正確?
如果它是 null 或者它是 AppUser 類的一個全新實體,那么在嘗試匹配和持久化時它最終會為 null 是有道理的。
你好!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/368792.html
