【问题标题】:JPA query throws the exceptionJPA 查询引发异常
【发布时间】:2010-12-15 20:18:30
【问题描述】:

我正在尝试将一条记录保存到 mysql 5.1 数据库中。当我使用实体 manager.persist() 或 merge() 方法时,它甚至不会将记录保存到数据库,当我尝试使用这样的本机插入语句时,它会抛出异常

Query query = entityManager.createNativeQuery("insert into Employee(firstName,lastName,phone,email) values(?,?,?,?);");
    query.setParameter(1, employee.getFirstName());
    query.setParameter(2, employee.getLastName());
    query.setParameter(3, employee.getPhone());
    query.setParameter(4, employee.getEmail());

上述查询抛出的异常是

org.springframework.orm.jpa.JpaSystemException: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query

请帮帮我!!!!

谢谢

【问题讨论】:

  • 我们能看到更多的堆栈跟踪吗?我假设您在查询上调用 executeUpdate。如果您不只是保存员工实例,为什么还要使用 jpa? JPA 的全部意义在于不必做你正在做的事情。
  • 那我该如何保存这些数据。我想使用 entityManager.persist() 或 merge() 但它不保存数据。请您详细说明没有 JPA 的情况下如何保存?
  • 除了 Bozho 对完整异常和堆栈跟踪的请求之外,如果您可以发布 Employee 类的代码,尤其是分配 ID 的方式,equals() 和 @ 可能会有所帮助987654325@ 实现,以及您定义的唯一约束(如果有)。

标签: java mysql hibernate jpa


【解决方案1】:

虽然我不能立即帮助您查询,因为您很可能忽略了堆栈跟踪的重要部分,但我有一个解决方案:

不要使用 INSERT HQL 查询。这不是 JPA 应该工作的方式。而是创建一个new Emplyee() 对象,它应该是一个@Entity,并设置它的属性,然后是entityManager.persist(employee)

为了使其工作,您需要一个正在运行的事务。 entityManager.getTransaction().being() 会启动一个,entityManager.getTransaction().commit() 会提交它。

【讨论】:

  • 我的 dao 是@Transactional,所以我认为我不需要使用 begin() 和 commit()。顺便说一句,persist(employee) 不会保存数据,因为它会引发 EntityExist 异常。现在,如果我签入数据库,则根本没有记录。所以我正在进一步调查它......
  • 给出整个例外。整个堆栈跟踪。这总是很重要。
猜你喜欢
  • 2011-04-21
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
相关资源
最近更新 更多