当前位置: 首页 > 知识库问答 >
问题:

PostgreSQL:将bytea转换为bigint

巫马心水
2023-03-14

更多信息:

我有一个hibernate存储库,如下所示-

 @Query(value = "update Sample_Table set other_id = ?1 where id = ?2", nativeQuery = true)
 void saveOrUpdateOtherId(Long other_id, Long id);

Hibernate以某种方式将id(在where子句中)作为bytea,而SAMPLE_TABLE将这个id字段作为bigint,因此会引发类型不匹配问题。

@Table(name = "Sample_Table")
public class Sample{
    @Id
    @Column(name = "id", unique = true)
    @GeneratedValue
    private Long id;

    @Column(name = "other_id")
    private Long other_id;
}

id字段在这里定义为long。

Edit-2如果有人得到这样的问题,很可能他在查询中传递了null值。

共有1个答案

蒙峰
2023-03-14

我在一个存储库查询中遇到了这个问题,该查询插入了一个具有可空列的记录。当该列的值为null时,hibernate使用了错误的类型,我将在Postgres中看到如下异常:

cannot cast type bytea to bigint

最终找到了这篇带有解决方案的博客文章:http://www.carbonrider.com/2020/08/15/org-PostgreSQL-util-psqlException-error-non-cast-type-bytea-to-uuid/,即使用Hibernate的TypedParameterValue。复制并粘贴它们的片段:

@Query("select * from user where firstname=:name and id=:id", nativeQuery=true)
public List<user> findByNameAndId(@Param("name") String firstName, @Param("id")TypedParameterValue id);
UUID userId = ... //Retrived from request parameter.
TypedParameterValue userIdParam = new TypedParameterValue(new PostgresUUIDType(), userId);
userRepository.findByNameAndId(userName, userIdParam);

不理想的是有一个特定于冬眠的解决方案,而不是一个纯粹的JPA解决方案,但还是想要解决方案。非常感谢“碳骑士”或任何添加该帖子的人!

 类似资料:
  • 问题内容: 我有此查询在MySQL中正常工作。这里有更多背景信息。 我尝试在PostgreSQL中运行它,但此错误消息失败。 PGError:错误:列“ c.name”必须出现在GROUP BY子句中或在聚合函数中使用 我不确定这是什么意思,所以我尝试在group by子句中将“ c.id”更改为“ c.name”(在MySQL中两者都是相同的,假定项的名称是唯一的)。 但是,这又产生了另一个类似

  • 问题内容: 下面的查询: 给我这样的结果: 我想要的是这样的结果: 如何更改原始SQL查询以得到上面的结果? 问题答案: 您要使用,这应该可以工作: 请注意,不再存在,因为它正在聚合。

  • 问题内容: 我已经创建了一个自定义数据类型枚举,如下所示: 从外部数据源,我得到[0,4]范围内的整数。我想将这些整数转换为它们对应的枚举值。 我怎样才能做到这一点? 我正在使用PostgreSQL 8.4。 问题答案:

  • 我正在尝试使用Ora2pg工具将我的Oracle数据库迁移到PostgreSQL。成功地导出了DDL文件,但是当我试图将其导入到PostgreSQL服务器时,得到了如下所示的一些错误。 在Oracle中有一个check约束,就像JSON条件一样,当我从Ora2PG导出时,它被生成为 当我尝试在PostgreSQL服务器中执行相同的操作时,得到的结果是“在JSON或JSON附近出现语法错误”。

  • 问题内容: 我有一些类型为int的列,但值是空的。因此,当我插入数据库时​​,我想将empty转换为null。我使用代码: 但显示错误: 为什么? 问题答案: 有NULLIF()功能: 如果var保持$ 2中的值,则NULL取而代之。 在这个例子中我替换空字符串:’‘有NULL。 有该类型的整数无空字符串。只是不可能。由于NULLIF()无法切换数据类型,因此必须清理PHP中的输入。 如果您没有定

  • 问题内容: 我一直在使用 PostgreSQL ,现在迁移到 MySQL 。 在我的查询中,我使用的是 PostgreSQL 的,我想知道在 MySQL中 是否有与此语句相对应的内容。 问题答案: 没有将使用SELECT DISTINCT ON的Postgresql查询转换为MySQL的完全等效的方法。 PostgreSQL的选择DISTINCT ON 在Postgresql中,以下查询将消除表达