【问题标题】:Writing a query in Hibernate at repository and at the service在存储库和服务中在 Hibernate 中编写查询
【发布时间】:2019-03-03 08:42:41
【问题描述】:

我需要在 Hibernate 中添加 2 个查询。

在存储库中,我已经完成了这种类型的查询,如果可以这样命名,但问题是使用 alter 是我第一次,因为通常我们只在存储库中使用 select。

我的例外是这个,只针对第一个查询,因为我已经注释掉了第二个,但它发生了同样的情况:

Caused by: java.lang.IllegalArgumentException:   
 Validation failed for query for method public abstract com.xitee.ccpt.entity.ProjectEmployee com.xitee.ccpt.repository.ProjectEmployeeRepository.dropConstraint()!
at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:87).
Caused by: java.lang.IllegalArgumentException: node to traverse cannot be null!

有谁知道我该如何修复或我的代码有什么问题?

service repository

【问题讨论】:

  • 通常您不想在运行时删除/添加约束,原因之一是如果多个客户端同时执行此操作,则会失败。您是否尝试通过暂时删除约束来解决约束错误?
  • 是的,我有一个菜单,如果用户想要编辑,我必须先保存它,因为我检查了时间间隔的代码并保存正确的。所以这个约束确实允许这样做,所以我尝试在编辑的情况下禁用/删除并在保存后再次创建它
  • 在大多数用例中,您希望约束始终有效。在将数据发送到数据库之前,您的应用程序中可能应该进行一些验证。
  • 在这种情况下只是片刻,我对代码有限制,因为除了编辑之外没有方法但可以删除旧的并创建新的,我必须看看是否有日期没有崩溃/相同。
  • 您能帮我找到解决方案吗? @纪尧姆

标签: java sql spring postgresql hibernate


【解决方案1】:

看看javadoc of Query annotationvalue 字段是 JPA 查询。这意味着,你不能用它来删除约束,你必须使用这样的原生查询:

SQLQuery query = session.createSQLQuery("your drop goes here"); 

该方法应如下所示:

public void dropConstraint() {
    session.createSQLQuery(DROP_CONSTRAINT).executeUpdate();
}

【讨论】:

  • 是的,我看了一下,但我还是迷路了
  • 你试过我的解决方案了吗?
  • 我不确定我是否理解......你写的代码片段我应该写在服务或存储库或java类我需要它
  • 不要使用@Query,你应该把你的drop放在我写的里面然后运行它......
  • 错了...在 cmets 中列出的错误太多了。我已经编辑了我的答案。
猜你喜欢
  • 2018-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
  • 2013-06-27
  • 1970-01-01
  • 2022-09-22
  • 1970-01-01
相关资源
最近更新 更多