Столбец гибернации "executement_status" имеет тип executement_status, но выражение имеет тип символа, меняющийся - PullRequest
0 голосов
/ 02 мая 2018

У меня проблема с обновлением полей enum в моей базе данных postgres из enums в моей сущности java с использованием hibernate, что привело к ошибке в заголовке.

Моя база данных выглядит так

\dT fulfillment_status
            List of data types
 Schema |        Name        | Description 
--------+--------------------+-------------
 public | fulfillment_status | 
(1 row)

Устанавливает тип для конкретного столбца executement_status, т.е.

       Column           |              Type              | Collation | Nullable |               Default                
----------------------------+--------------------------------+-----------+----------+--------------------------------------

fulfillment_status         | fulfillment_status             |           | not null | 

Соответствующие разделы класса сущностей Java

@Entity
@Table(name = "payments", uniqueConstraints = { @UniqueConstraint(columnNames = {"id"})})
public class Payment {
 private FulfillmentStatus fulfillmentStatus;

public enum FulfillmentStatus {
        PENDING, FULFILLED, FAILED, ABORTED
    }

@Enumerated(EnumType.STRING)
    @Column(name = "fulfillment_status", nullable = false, columnDefinition = "enum('PENDING', 'FULFILLED', 'FAILED', 'ABORTED')")
    public FulfillmentStatus getFulfillmentStatus() {
        return fulfillmentStatus;
    }

    public void setFulfillmentStatus(FulfillmentStatus fulfillmentStatus) {
        this.fulfillmentStatus = fulfillmentStatus;
    }

И код, используемый для обновления класса

        Session session = sessionFactory.getCurrentSession();
        session.beginTransaction();
        CriteriaBuilder builder = session.getCriteriaBuilder();
        CriteriaUpdate<Payment> update = 
        builder.createCriteriaUpdate(Payment.class);
        Root root = update.from(Payment.class);
        update.set(root.get("fulfillmentStatus"), 
        Payment.FulfillmentStatus.FULFILLED);
        update.where(builder.equal(root.get("requestID"), UUID.fromString(requestID)));
        session.createQuery(update).executeUpdate();
        session.getTransaction().commit();
        session.close();

Это приводит к ошибке

Hibernate: 
    update
        payments 
    set
        fulfillment_status=?
2018-05-02 08:54:11 WARN  SqlExceptionHelper:129 - SQL Error: 0, SQLState: 42804
2018-05-02 08:54:11 ERROR SqlExceptionHelper:131 - ERROR: column "fulfillment_status" is of type fulfillment_status but expression is of type character varying
  Hint: You will need to rewrite or cast the expression.
  Position: 40

Проблема здесь заключается в том, как использовать CriteriaUpdate для отображения типов перечисления java на типы перечисления postgres ... надеюсь, без создания дополнительных классов отображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...