Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“线程中的异常”;“主要”;java.lang.IllegalArgumentException:org.hibernate.QueryException:无法解析属性:_Java_Hibernate_Jpa - Fatal编程技术网

“线程中的异常”;“主要”;java.lang.IllegalArgumentException:org.hibernate.QueryException:无法解析属性:

“线程中的异常”;“主要”;java.lang.IllegalArgumentException:org.hibernate.QueryException:无法解析属性:,java,hibernate,jpa,Java,Hibernate,Jpa,我正在Java应用程序中使用JPA。我试图在mysql中更新我的数据,但我遇到了这个异常 Exception in thread "main" java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: last_updated_mdm_id of: com.avanir.mdm.app.model.hcp.MdmId [UPDATE com.avanir.mdm.ap

我正在Java应用程序中使用JPA。我试图在mysql中更新我的数据,但我遇到了这个异常

Exception in thread "main" java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: last_updated_mdm_id of: com.avanir.mdm.app.model.hcp.MdmId [UPDATE com.avanir.mdm.app.model.hcp.MdmId e SET e.last_updated_mdm_id = :id where e.last_updated_mdm_id = :nextid]


如何解决这个问题?谢谢

我的代码

 public static void updateMdmId(String lastUpdatedMdmId) throws IOException {

        EntityManager em = Persistence.createEntityManagerFactory("abc").createEntityManager();
        String id = Integer.toString(Integer.parseInt(lastUpdatedMdmId) +1 );
        em.getTransaction().begin();
        Query query = em.createQuery("UPDATE MdmId e SET e.last_updated_mdm_id = :id" +
                " where e.last_updated_mdm_id = :nextid");
        query.setParameter("id", id);
        query.setParameter("nextid", lastUpdatedMdmId);
        int rowsUpdated = query.executeUpdate();
        System.out.println("entities Updated: " + rowsUpdated);
        em.getTransaction().commit();
        em.close();
    }
描述表

mysql> desc mdm_id;
+---------------------+-------------+------+-----+---------+-------+
| Field               | Type        | Null | Key | Default | Extra |
+---------------------+-------------+------+-----+---------+-------+
| last_updated_mdm_id | varchar(20) | NO   | PRI | NULL    |       |
+---------------------+-------------+------+-----+---------+-------+
1 row in set (0.64 sec)

在本例中,您正试图使用查询更新表的主键。相反,你可以采取完全不同的方法

  • 创建要更新的实体的克隆
  • 从表中删除它
  • 更新实体并将其作为新条目插入表中
  • 根据:

    • 实体类必须使用实体注释进行注释
    • 实体类必须具有无参数构造函数
    • 实体类不能是final
    • 实体类必须实现可序列化接口。实体类 必须具有唯一的,不可变ID

    因此,一般来说,我认为Hibernate不允许您使用update语句更改表的主键。

    您正在尝试更改主键,jpa不允许您修改它。因此,解决方案之一是将其持久化并删除以前的记录