代码之家  ›  专栏  ›  技术社区  ›  Mike

错误:“image”列的类型为bytea,但在使用Jhipster的Postgres中表达式的类型为oid

  •  0
  • Mike  · 技术社区  · 4 年前

    我在GAE(Postgres 9.6)上部署了一个Jhipster应用程序,但在本地DB H2中没有遇到这个错误:

    common frames omitted Caused by: org.postgresql.util.PSQLException: ERROR: column "image" is of type bytea but expression is of type oid
    

    从实体照片:

    package es.mibar.web.domain;
    
    import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    import org.hibernate.annotations.Cache;
    import org.hibernate.annotations.CacheConcurrencyStrategy;
    
    import javax.persistence.*;
    import javax.validation.constraints.*;
    
    import java.io.Serializable;
    import java.time.Instant;
    
    /**
     * A Photo.
     */
    @Entity
    @Table(name = "photo")
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    public class Photo implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        @Id
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
        @SequenceGenerator(name = "sequenceGenerator")
        private Long id;
    
        @NotNull
        @Column(name = "creation_date", nullable = false)
        private Instant creationDate;
    
        @Lob
        @Column(name = "image")
        private byte[] image;
    
        @Column(name = "image_content_type")
        private String imageContentType;
    
        @Size(min = 2, max = 25000)
        @Column(name = "description", length = 25000)
        private String description;
    
        @ManyToOne(optional = false)
        @NotNull
        @JsonIgnoreProperties("photos")
        private Local local;
    
        @ManyToOne
        @JsonIgnoreProperties("photos")
        private Course course;
    

    JDL公司:

    entity Photo {
        creationDate Instant required,
        image ImageBlob,
        description String minlength(2) maxlength(25000)
    }
    

    我不知道也许这是个暗示: Hibernate, Postgresql: Column "x" is of type oid but expression is of type byte

    但我不确定这是否是一个bug(因为我没有mofid这个实体),它应该在Jhipster中修复,或者可以应用这个解决方案。

    谢谢你的帮助。

    0 回复  |  直到 4 年前
        1
  •  1
  •   Mike    4 年前

    这是一只老虫子 https://github.com/jhipster/generator-jhipster/issues/1940 解决方案是使用以下内容更改@Lob注释:

    @Type(type="org.hibernate.type.BinaryType")
    @Column(name = "image")
    private byte[] image;
    

    PD:我把问题和答案留作另外一个,因为这是一个jhipster潜在的缺陷,我们无法复制。因此,如果有人陷入同样的问题,并可以复制它,我们想报告它作为Jhipster的问题,使工作区的正式。如果再不发生,我们就忘了它。谢谢你的考虑。

        2
  •  0
  •   Peter F    3 年前

    检查您的hibernate迁移。表列类型可能不正确(这是我的问题)。

    我曾经 ./mvnw liquibase:diff 在H2数据库上,因此列类型设置为 blob ,但它需要 longblob

    用blob自动生成:

        <changeSet author="generated" id="1610443997705-19">
            <addColumn tableName="photo">
                <column name="image" type="blob"/>
            </addColumn>
        </changeSet>
    

    更新 type="blob" type="longblob"

        <changeSet author="generated" id="1611655471347-1">
            <dropColumn tableName="photo" columnName="image"/>
            <addColumn tableName="photo">
                <column name="image" type="longblob"/>
            </addColumn>
        </changeSet>