我是 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
}