hibernate 如何编写HQL插入查询?

li9yvcax  于 2023-06-23  发布在  其他
关注(0)|答案(4)|浏览(150)

我正在努力编写一个HQL查询,以便在表中插入新记录。我已经看到一些插入查询如下,但我不希望插入数据从另一个表如下代码。

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);

例如,我有一个表“用户”,有三个字段,如姓名,年龄,号码,我有这个用户表的实体。这将是什么插入查询?

ryevplcw

ryevplcw1#

在HQL中,只有INSERT INTO…支持SELECT...;没有INSERT INTO…HQL只支持从另一个表插入。
因此,从SELECT查询INSERT是可能的,如下所示

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

来自here secion 4
如果你有值和Entity,只需调用

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

exdqitrt2#

HQL不支持这样的INSERT,所以你必须通过创建和持久化新的实体来实现。
你可以阅读here
只有插入到…支持SELECT ...表单。不能指定要插入的显式值。

ycggw6v2

ycggw6v23#

您可以:

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();

只要确保你添加了所有设置为“非空”的值,否则你会得到一个nullException。

xwbd5t1u

xwbd5t1u4#

HQL仅支持INSERT INTO.........选择……;没有机会写INSERT INTO......... VALUES,我的意思是在写插入查询时,我们需要从其他表中选择值,我们不能手动插入我们自己的值。

相关问题