【问题标题】:Why can't I query by String value when I can query by equivalent int value in Hibernate JPA with java当我可以使用 java 在 Hibernate JPA 中通过等效 int 值进行查询时,为什么我不能通过字符串值进行查询
【发布时间】:2022-01-07 00:12:29
【问题描述】:

我在工作中得到了一个项目,包括 JPA / Hibernate

例如,我有一个对象,可以说是

class SampleObject {
   string value;
   string othervalue;
}

假设数据库中的值填充了 2 行

表格 - 样本对象

  • 第 1 行 - value = "21", othervalue = "some other value"

  • 第 2 行 - value = "31", othervalue = "some other other value"

我可以编写一个返回以下行的查询

Query q = entityManager.createQuery("select s from SampleObject s where value = 21")

我可以编写一个查询来返回后面的行

Query q = entityManager.createNativeQuery("select * from dbo.SampleObject s where value = 21", SampleObject.class)

但我不能做的是将这些相同的查询写为字符串值并返回数据

前 1:

  entityManager.createQuery("select s from SampleObject s where value = '21'")

前 2:

  entityManager.createQuery("select s from SampleObject s where value = :val").setParameter("val", "21")

前 3:

   entityManager.createNativeQuery("select * from dbo.SampleObject s where value = '21'", SampleObject.class)

但正如您所见,它存储为 varchar 并且需要保留为字符串,因此我需要能够通过字符串查询

免责声明:

我是 hibernate 新手 - 非常新......非常非常新!

我应该添加SQL SSMS 我可以直接通过字符串查询

我还尝试使用以下建议之一,但对于上下文,它没有解决

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    你可以使用:

    entityManager.unwrap(Session.class)
                .createQuery("<your query>")
                .setParameter("identifier", "3", StringType.INSTANCE);
    

    该实现适用于您要传递的确切类型。

    【讨论】:

    • 谢谢,但这并没有解决我正在为候选人寻找一个合理的函数签名,但还没有找到一个
    • 您使用的是哪个版本的 Hibernate?
    【解决方案2】:

    对不起,我有一个旧的连接字符串

    我直接在ssms中查询当前数据,连接字符串在java中抓取旧数据

    我的错,它一直在工作

    调试器显示旧数据

    感谢您的帮助

    【讨论】:

      猜你喜欢
      • 2014-05-12
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      • 2019-02-06
      相关资源
      最近更新 更多