1

我是 spring r2dbc 的新手。以前我有用户休眠。在休眠中,当您需要将 postgresql 枚举映射到 java 枚举时,您只需添加com.vladmihalcea:hibernate-types-52和使用@Enumerated(如下所示)。与R2DBC 和枚举(PostgreSQL)相关的SO 问题我必须为每个枚举创建编解码器。是否有可能通过某种标签或其他通用解决方案来实现这一目标,而不仅仅是创建多个编解码器。

CREATE TYPE user_type_enum AS ENUM ('ADMIN', 'USER');
public class PostgreSQLEnumType extends org.hibernate.type.EnumType {
  public void nullSafeSet(PreparedStatement st, Object value,
      int index, SharedSessionContractImplementor session)
      throws HibernateException, SQLException {
    st.setObject(
      index,
      value != null ? ((Enum) value).name() : null,
      Types.OTHER
    );
  }
}
public enum UserTypeEnum {
  ADMIN,
  USER
}
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import org.springframework.data.annotation.Id
import org.springframework.data.relational.core.mapping.Table;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;

@Table;
@TypeDef(
    name = "pgsql_enum",
    typeClass = PostgreSQLEnumType.class
)
public class User {

  @Id
  private Long id;

  private String usename;

  @Enumerated(EnumType.STRING)
  @Type(type = "pgsql_enum")
  private UserEnumType userType;

  // Getters and setters provided
}
4

0 回答 0