postgresql 错误:“id”列的类型为 uuid 但表达式的类型为 bytea

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/26749128/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-21 01:40:36  来源:igfitidea点击:

ERROR: column "id" is of type uuid but expression is of type bytea

javadatabasepostgresqlopenshift

提问by daydreamer

My entity looks like

我的实体看起来像

@Entity
public class Member {
    @Id
    private UUID id;
    @Column(name = "member_external_id", unique = true, nullable = false)
    private String memberExternalId;
    @Column(name = "client_id", unique = true, nullable = false)
    private String clientId;
    @Column(name = "client_secret", unique = true, nullable = false)
    private String clientSecret;
    @Column(unique = true, nullable = false)
    private String email;
    private boolean active;
    @Column(name = "created_at")
    private LocalDateTime createdAt;

    public Member() {
        // required by JPA
    }
    ....
}

When I deploy my application on OpenShift with PostgreSQL, I see following error in logs

当我使用 PostgreSQL 在 OpenShift 上部署我的应用程序时,我在日志中看到以下错误

Caused by: org.hibernate.exception.SQLGrammarException: could not execute statement
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:190) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:62) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3124) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3581) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:104) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:463) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:349) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1335) [hibernate-entitymanager-4.3.5.Final.jar:4.3.5.Final]
    ... 203 more
Caused by: org.postgresql.util.PSQLException: ERROR: column "id" is of type uuid but expression is of type bytea
  Hint: You will need to rewrite or cast the expression.
  Position: 130
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062) [postgresql-9.2-1003-jdbc4.jar:]
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795) [postgresql-9.2-1003-jdbc4.jar:]
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) [postgresql-9.2-1003-jdbc4.jar:]
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479) [postgresql-9.2-1003-jdbc4.jar:]
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:367) [postgresql-9.2-1003-jdbc4.jar:]
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:321) [postgresql-9.2-1003-jdbc4.jar:]
    at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:493)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:187) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    ... 213 more

OpenShift has PostgreSQL version 9.2.

OpenShift 有 PostgreSQL 9.2 版。

enter image description here

在此处输入图片说明

The dependency that I am using to connect to database looks like

我用来连接数据库的依赖项看起来像

 <dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.2-1003-jdbc4</version>
</dependency>

Has anyone seen this issue? I don't know how to resolve it.

有没有人看到这个问题?我不知道如何解决。

回答by mjallday

Try adding a type annotation onto the UUIDtype e.g.

尝试在类型上添加类型注释,UUID例如

@Type(type = "pg-uuid")
@Column(name = "id", columnDefinition = "uuid")
private UUID id;

I just worked past the same error

我刚刚解决了同样的错误

回答by kopelitsa

This is how I resolved it:

我是这样解决的:

  1. I added a dependency on eclipselink JPA https://mvnrepository.com/artifact/org.eclipse.persistence/org.eclipse.persistence.jpa

  2. I added a converter to my UUID

  1. 我添加了对 eclipselink JPA https://mvnrepository.com/artifact/org.eclipse.persistence/org.eclipse.persistence.jpa的依赖

  2. 我在我的 UUID 中添加了一个转换器

    @Id
    @TypeConverter(name = "uuidConverter", dataType = Object.class, objectType = UUID.class)
    private UUID uuid;