谁能帮我把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
等
提前谢谢!
1条答案
按热度按时间ctrmrzij1#
您可以使用@convert annotation在java对象字段和sql字段之间进行转换:
您需要在中实现上述2个方法
RatingConverter
根据业务逻辑转换字段。