java—在sql中将varchar转换为数字

xbp102n0  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(437)

谁能帮我把sql中的字符串表示形式的值转换成int吗。例如,我在sql表中有'five'varchar文件,我需要使用sql查询将其转换为5。至少可以只用sql来实现。
是否有可能在criteriaapi中实现它。
主要目标是将所有字符串字段转换为数字表示,并找到每个productid的平均值。
实体:

@Entity
@Table(name = "product_review")
public class ProductReview {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "prod_rev_seq")
    private Long id;

    @ManyToOne(optional = false)
    @JoinColumn(name = "prod_id")
    private Product product;

    @Enumerated(EnumType.STRING)
    private Rating rating;
}

@Entity
@Table(name = "product")
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "prod_seq")
    @Column(name = "prod_id")
    private Long id;

    @OneToMany(mappedBy = "product", fetch = FetchType.LAZY,
    private Set<ProductReview> productReviews = new HashSet<>();

}

public enum Rating implements JsonDeserializableEnum {

ONE(BigDecimal.ONE, "Horrible", BigDecimal.ZERO, BigDecimal.valueOf(1.5)),
ONE_AND_HALF(BigDecimal.valueOf(1.5), "Poor", BigDecimal.valueOf(1.5), BigDecimal.valueOf(2)),
TWO(BigDecimal.valueOf(2), "Poor", BigDecimal.valueOf(2), BigDecimal.valueOf(2.5)),
TWO_AND_HALF(BigDecimal.valueOf(2.5), "Below average", BigDecimal.valueOf(2.5), BigDecimal.valueOf(3)),
THREE(BigDecimal.valueOf(3), "Average", BigDecimal.valueOf(3), BigDecimal.valueOf(3.5)),
THREE_AND_HALF(BigDecimal.valueOf(3.5), "Average", BigDecimal.valueOf(3.5), BigDecimal.valueOf(4)),
FOUR(BigDecimal.valueOf(4), "Good", BigDecimal.valueOf(4), BigDecimal.valueOf(4.5)),
FOUR_AND_HALF(BigDecimal.valueOf(4.5), "Very good", BigDecimal.valueOf(4.5), BigDecimal.valueOf(5)),
FIVE(BigDecimal.valueOf(5), "Excellent", BigDecimal.valueOf(5), BigDecimal.valueOf(5.5));

}

“五”-5
“三”-3

提前谢谢!

ctrmrzij

ctrmrzij1#

您可以使用@convert annotation在java对象字段和sql字段之间进行转换:

@Enumerated(EnumType.STRING)
 @Convert(converter = RatingConverter.class)
 private Rating rating;
@Component
@Converter(autoApply=true)
public class RatingConverter extends AbstractAttributeConverter<Rating, Integer> {

    @Override
    public BigDecimal convertToDatabaseColumn(Rating rating) {
        // TODO
    }

    @Override
    public Rating convertToEntityAttribute(Integer dbData) {
        // TODO
    }

}

您需要在中实现上述2个方法 RatingConverter 根据业务逻辑转换字段。

相关问题