投影对象上String字段的空值

时间:2018-11-05 00:09:18

标签: java mysql spring-boot jpa

在Spring Boot应用程序中,我有一个化合物ID定义如下的类:

@Embeddable
public class StatisticId implements Serializable {

    private static final long serialVersionUID = 1L;

    @Column(length = 255, nullable = false)
    private String shortName;

    @Enumerated(EnumType.STRING)
    @Column(length = 32, nullable = false)
    private Month month;

    @Column(nullable = false)
    private int year;

    // getters, setters, equals, hashCode, toString
}

(简化的)类定义为:

@Entity
public class Statistic implements Serializable {

    private static final long serialVersionUID = 1L;

    private BigDecimal sales;

    @EmbeddedId
    private StatisticId id;

    // getters, setters, toString
}

我想对这个班级做一个预测:

public interface StatisticProjection {
    public String getShortName();
    public Month getMonth();
    public int getYear();
    public BigDecimal getSales();
}

并在以下存储库中使用它:

public interface StatisticsRepository extends CrudRepository<Statistic, Long> {
    @Query(value = "select short_name, month, year, sales from statistic where short_name in = ?1", nativeQuery = true)
    Iterable<StatisticProjection> findByShortName(Collection<String> shortNames);

}

findByShortName 方法调用的结果会生成我期望的元素列表,但每个元素都具有空值 shortName (其他字段正确) )。

我直接在MySQL数据库上执行完全相同的查询,它返回 short_name 列的正确值。

我应该怎么做才能在投影类上拥有有效的 shortName

1 个答案:

答案 0 :(得分:0)

投影似乎无法与本机查询很好地配合,请更加强调。要获取其中带有下划线的字段,请在get方法中使用下划线。因此,不要使用getShortName()