错误:运算符不存在:字符变化 = bytea

Posted

技术标签:

【中文标题】错误:运算符不存在:字符变化 = bytea【英文标题】:ERROR: operator does not exist: character varying = bytea 【发布时间】:2015-03-11 04:40:14 【问题描述】:

我有一个基于 Spring MVC + Security + Hibernate 的项目。 Hibernate 和 jdbc 版本是:

<!-- Hibernate -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.7.Final</version>
        </dependency>

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.3-1102-jdbc41</version>
        </dependency>

当我尝试通过 Spring Security 表单登录时遇到这个众所周知的错误。

jan 13, 2015 12:51:05 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: operator does not exist: character varying = bytea

我已经读到它可能是由于 PostgreSQL 和驱动程序的版本差异而发生的,但对我来说似乎没问题。

【问题讨论】:

这种情况什么时候发生?任何特定的 SQL 查询? 我从数据库中获取用户凭据和角色。实际上来自两个通过注释连接的数据库表:@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")... 我得到:Hibernate: select this_.id as id1_1_0_, this_.email as email2_1_0_, this_.enabled as enabled3_1_0_, this_.password as password4_1_0_, this_.username as username5_1_0_ from users this_ Hibernate: select userrole0_.username as username3_1_0_, userrole0_.id as id1_0_0_, userrole0_.id as id1_0_1_, userrole0_.role as role2_0_1_, userrole0_.username as username3_0_1_ from roles userrole0_ where userrole0_.username=? 似乎第一个查询运行良好,在尝试获取用户角色后崩溃 您的数据库架构? 我的意思是 DDL SQL。 【参考方案1】:

外键错误。使用 Hibernate/JPA 时,外键应始终指向另一个表的 id(主键)。您的外键引用username,但它应该引用id。作为替代方案,您可以在users 表中创建username 主键,并相应地更改实体注释。

【讨论】:

CREATE TABLE users ( id uuid NOT NULL, username character varying(32) NOT NULL, password character varying(32) NOT NULL, email character varying(100) NOT NULL, enabled boolean NOT NULL DEFAULT true, CONSTRAINT users_pkey PRIMARY KEY (username), CONSTRAINT unique_email UNIQUE (email), CONSTRAINT unique_username UNIQUE (username), CONSTRAINT unique_uuid UNIQUE (id) ) 现在更糟糕了)) 第一次迭代后出现了同样的错误,当hibernate在角色之前收集用户数据时 @AlexNasonov 你更新了你的用户实体,所以@Id 在你的新主键上吗?

以上是关于错误:运算符不存在:字符变化 = bytea的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL:错误:运算符不存在:整数 = 字符变化

SequelizeDatabaseError:运算符不存在:字符变化 [] @> 字符变化

导轨 3.1。 Heroku PGError:运算符不存在:字符变化=整数

运算符不存在:字符变化 = Postgres 中的记录

使用更新的sql

Postgres 中的位掩码