【问题标题】:How to use 'Insert' in a nativeSQL query in Hibernate outside the mapped class ?如何在映射类之外的 Hibernate 的 nativeSQL 查询中使用“插入”?
【发布时间】:2015-08-13 13:48:48
【问题描述】:

在 Hibernate 中,您可以像这样在本机 SQL 中使用“SELECT”查询:

Query query = session.createSQLQuery("SELECT ... FROM ...");

但我想使用“插入”查询。

所以,我查看了文档,看来您必须直接进入映射类并在其中编写代码。

但我想将它用作“SELECT”查询(在映射类之外),因为它看起来更实用。

确实,为什么对于休眠原生 SQL 查询,“SELECT”和“INSERT”的处理方式会有所不同?

【问题讨论】:

    标签: java sql hibernate plsql


    【解决方案1】:

    HQL INSERT 不能用于直接插入任意实体——它只能用于插入从 SELECT 查询获得的信息构造的实体(与普通 SQL 不同,在普通 SQL 中,INSERT 命令可用于将任意数据插入表中,以及从其他表中选择的插入值)。

    INSERT 语句的语法如下:

    INSERT INTO path ( property [, ...]) select
    

    实体的名称是路径。属性名称是在合并的 SELECT 查询的 FROM 路径中列出的实体的属性名称。选择查询是 HQL SELECT 查询(如下一节所述)。

    由于此 HQL 语句只能使用 HQL select 提供的数据,因此它的应用可能会受到限制。在实际清除用户之前将用户复制到已清除表的示例可能如下所示:

    Query query=session.createQuery("insert into purged_accounts(id, code, status) "+
        "select id, code, status from acount where status=:status");
    query.setString("status", "purged");
    int rowsCopied=query.executeUpdate();
    

    或者你可以使用

    session.persist(obj);
    

    其中 obj 是 POJO 类的对象,比如说 TestClass

    TestClass obj=new TestClass('','','');  //paramatrized constructor for the values you want to insert in your database.
    

    【讨论】:

      猜你喜欢
      • 2019-07-31
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 2017-01-02
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 2023-02-14
      相关资源
      最近更新 更多