“线程中的异常”;“主要”;java.lang.IllegalArgumentException:org.hibernate.QueryException:无法解析属性:
我正在Java应用程序中使用JPA。我试图在mysql中更新我的数据,但我遇到了这个异常“线程中的异常”;“主要”;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
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不允许您修改它。因此,解决方案之一是将其持久化并删除以前的记录