Spring Boot 如何显示有关实体的信息?

lokaqttq  于 2023-02-12  发布在  Spring
关注(0)|答案(2)|浏览(136)

我遇到了一个问题。点击"创建订单"按钮后,用户被重定向到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);
        }
    }
gr8qqesn

gr8qqesn1#

我缺少orderDao.create的代码,但通常您会有一个服务类(用Springs@Service注解),它被注入到控制器中,并被调用来创建实体。您可以使此服务方法返回刚创建的实体的ID。因此,它可能类似于public Long createOrder(OrderDao orderDao)。在其中,调用repository.save(entity)后,实体将已设置ID(尝试使用调试器验证您自己:在save实体之前设置一个断点,并检查ID是否为空,然后向前一步,看到在save之后设置了ID)。

to94eoyn

to94eoyn2#

我的回答是:

public Order show(Long id) {
    Transaction tx = null;
    try (Session session = BogPomogi.getSessionFactory().openSession()) {
        session.beginTransaction();
        Query query = session.createQuery("select text from Order  where id = :id");
        query.setParameter("id", id);
        String result = (String) query.getSingleResult();

        session.getTransaction().commit();
        session.close();
        return new Order(result, "adsfreger", 1);
    }
}

相关问题