我遇到了一个问题。点击"创建订单"按钮后,用户被重定向到URL:"localhost:8080/currentorder/{id}"访问此URL后,用户应看到order.text。
尝试解决:在DAO中,我创建了一个方法,该方法通过从控制器传递的ID在HQL中查找订单:
public List show(Long id) {
Transaction tx = null;
try (Session session = BogPomogi.getSessionFactory().openSession()) {
session.beginTransaction();
Query query = session.createQuery("from Order where id = :id");
query.setParameter("id", id);
List result = query.getResultList();
session.getTransaction().commit();
return result;
}
}
但是正如你所理解的,在那之后,timelif无法显示任何东西(我的意思是order. getStatus())现在我仍然认为我需要搜索数据库并返回一个对象,但是怎么做呢?请帮帮我我的代码:
- 主计长**
@PostMapping("/")
public String createOrder (@ModelAttribute("order") Orderdao orderdao, String text, Model model, RedirectAttributes redirectAttributes){
orderdao.createOrder(text);
redirectAttributes.addAttribute("id", orderdao.checkLastOrder());
return "redirect:/currentorders/{id}";
}
@GetMapping("/currentorders/{id}")
public String showOrder (@PathVariable("id") Long id, Orderdao orderdao, Model model, Order order){
model.addAttribute("currentOrder", orderdao.show(id));
return "order";
}
- 实体**
@Entity
@Table(name = "orders")
public class Order implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String text;
private String customer;
private int status;
public Order(String text, String customer, int status) {
this.text = text;
this.customer = customer;
this.status = status;
}
public Order(String customer) {
this.customer = customer;
}
public Order(){
}
//Getters and setters
- 方法**:
public Order show(Long id) {
Transaction tx = null;
try (Session session = BogPomogi.getSessionFactory().openSession()) {
session.beginTransaction();
Query query = session.createQuery("from Order where id = :id");
query.setParameter("id", id);
List result = (List) query.getSingleResult();
session.getTransaction().commit();
return (Order) session.save(result);
}
}
2条答案
按热度按时间gr8qqesn1#
我缺少
orderDao.create
的代码,但通常您会有一个服务类(用Springs@Service
注解),它被注入到控制器中,并被调用来创建实体。您可以使此服务方法返回刚创建的实体的ID。因此,它可能类似于public Long createOrder(OrderDao orderDao)
。在其中,调用repository.save(entity)
后,实体将已设置ID(尝试使用调试器验证您自己:在save
实体之前设置一个断点,并检查ID是否为空,然后向前一步,看到在save
之后设置了ID)。to94eoyn2#
我的回答是: