0

Below is my query

public int updateUser(UserStatus status, UserStatus[] statuses) {
        Query query = entityManager.createQuery("UPDATE UserAccount u SET u.status = :status WHERE u.userId = :userId AND (u.status IN (:statuses))");
        query.setParameter("status", status);
        query.setParameter("userId", userId);
        query.setParameter("statuses", Arrays.asList(statuses));
        return query.executeUpdate();
    }

I am passing status as UserStatus type but still I am getting error

operator does not exist: user_status = character varying

I have column in my entity as

@Column(name = "status")
    @Enumerated(EnumType.STRING)
    private UserStatus status;   // tried using columnTransformer

@ColumnTransformer also I tried its not working for update query. Its working in case of insert.

How can I update enum column.

Thank you.

  • 1
    This question has a few possibilities for you: https://stackoverflow.com/questions/851758/java-enums-jpa-and-postgres-enums-how-do-i-make-them-work-together – egeorge Mar 17 '23 at 22:35

2 Answers2

0

I think you should try to force convert the status enum like this:

public int updateUser(UserStatus status, UserStatus[] statuses) {
        Query query = entityManager.createQuery("UPDATE UserAccount u SET u.status = :status WHERE u.userId = :userId AND (u.status IN (:statuses))");
        query.setParameter("status", (UserStatus)Enum.Parse(typeof(UserStatus), status));
        query.setParameter("userId", userId);
        query.setParameter("statuses", Arrays.asList(statuses));
        return query.executeUpdate();
    }

You're comparing u.status(VARCHAR) with :status(UserStatus).

0

The easiest way forward would be to upgrade to Hibernate 6.2, as that supports database native enum types out of the box.

Christian Beikov
  • 15,141
  • 2
  • 32
  • 58