错误:运算符不存在:字符变化 = 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:运算符不存在:字符变化 [] @> 字符变化