代码之家  ›  专栏  ›  技术社区  ›  sjh

HQL-使用mysql、hibernate将数据插入到一个表中

  •  1
  • sjh  · 技术社区  · 7 年前
     public static int add_Book(String title, String auth_name, String publisher, String genre) { 
         Transaction tx = session.beginTransaction(); 
        Query query = session.createQuery
                 ("INSERT INTO Book(title,auth_name,publisher,genre)"
                        + "SELECT "+title+", "+auth_name+", "+publisher+", "+genre); 
         tx.commit(); 
         return query.executeUpdate();
    

    这个错误

    线程“AWT-EventQueue-0”中出现异常 Java语言lang.IllegalStateException:节点没有数据类型: 组织。冬眠hql。内部的ast。树IdentNode+-[IDENT]IdentNode: “q”{originalText=q}。。。

    “q”是JTextField数据

    在“标题”中插入“q”

    ... 我们将不胜感激。。

    2 回复  |  直到 7 年前
        1
  •  1
  •   v.ladynev    7 年前

    想做就做

    public static void addBook(String title, String authName, String publisher, String genre) { 
        session.save(new Book(title, authName, publisher, genre));
    }
    

    显然,应该用会话/事务控制代码包装该方法。

    而且,请始终使用Java命名约定! auth_name, add_Book 是否使用了不正确的名称 authName, addBook 相反

        2
  •  0
  •   F0XS Akshay Vyas    7 年前

    我认为@v.ladynev的答案很好,但你也可以这样尝试:

     public static void addBook(String title, String authName, String publisher, String genre) { 
    
    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction tx = null;
    // create book Object
    Book book = new Book();
    book.setTitle(title);
    book.setAuthName(authName);
    book.setPublisher(publisher);
    book.setGenre(genre);
    
    try {
     tx = session.beginTransaction();
     // Save the book to database
     session.save(book); 
     tx.commit();
     }catch(Exception e){
        if (tx!=null) {
         tx.rollback();}
      e.printStackTrace(); 
     }finally{
     // close your session
     session.close();
     }
    }
    

    至少使用Bean类来“干净地”编码。我们只在特殊情况下使用查询,否则我们最多只能在代码中避免查询,或者至少使用捆绑资源。
    还有什么可以在你的 Book 你的bean类 setAuthName 而不是 setAuth_Name .