-->

How to write HQL Insert query?

2020-08-17 05:30发布

问题:

I am struggling to write a HQL query for inserting a new record in a table. I have seen some of insert query as below but I don't want insert data from another table as below code.

String hql = "INSERT INTO Employee(firstName, lastName, salary)"  + 
             "SELECT firstName, lastName, salary FROM old_employee";
Query query = session.createQuery(hql);
int result = query.executeUpdate();
System.out.println("Rows affected: " + result);

For example I have a table "User" with three fields like name, age, number and I have entity for this user table. what will be the insert query for this?

回答1:

In HQL, only the INSERT INTO … SELECT … is supported; there is no INSERT INTO … VALUES. HQL only support insert from another table.

So query INSERT from SELECT is possible like this

Query query = session.createQuery("insert into Stock(stock_code, stock_name)" +
                "select stock_code, stock_name from backup_stock");
int result = query.executeUpdate();

Got from here secion 4

If you have values and Entity just call

MyEntity e=new MyEntity();
e.setXXXX(the XXX values);
save(e);


回答2:

HQL doesn't support such INSERTs so you have to do this by creating and persisting new entity.

You can read about it here.

Only the INSERT INTO ... SELECT ... form is supported. You cannot specify explicit values to insert.



回答3:

You can do:

Foo foo = new Foo(any, columns, you, want);
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();

session.save(foo); //Here you have the magic

session.getTransaction().commit();
session.close();

Just make sure you add all the values set as "not null", or you´ll get a nullException.