【问题标题】:spring data paging and composite key, hibernate unknow a field弹簧数据分页和复合键,休眠未知字段
【发布时间】:2018-07-19 02:06:10
【问题描述】:

我将 IdClass 用于某些实体

无法解析属性:samplingYear of: com.lcm.model.Samples

public class SamplingsPK implements Serializable {

    private int year; 
    private Integer id;

    public SamplingsPK(int year, Integer id) {
        this.id = id;
        this.year=year;
    }
    ..
}


public class SamplesPK implements Serializable {

    private SamplingsPK sampling;
    private String sampleLetter;

    public SamplesPK(SamplingsPK sampling, String sampleLetter) {
        this.sampling = sampling;
        this.sampleLetter = sampleLetter;
    }
    ...
}

@Entity
@IdClass(SamplesPK.class)
public class Samples {
    @Id
    private String sampleLetter;

    @Id
    @ManyToOne(optional=false)
    @JoinColumns({
        @JoinColumn(name = "sampling_id", referencedColumnName = "id"),
        @JoinColumn(name = "sampling_year", referencedColumnName = "year")})
    private Samplings sampling;
    ....
}

@Entity
@IdClass(SamplingsPK.class)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Samplings {
    @Id
    private Integer year;

    @Id
    @GeneratedValue
    private Integer id;
    ...
}

当我运行这个查询时

@Query(
  value = "select s from Samples s Join fetch s.sampling sp Join  fetch sp.machine m Join  fetch sp.product p Join  fetch p.productType",
  countQuery = "select count(s) from Samples s Join s.sampling sp Join  sp.machine m Join  sp.product p Join  p.productType")
    public Page<Samples> findAllFullSample(Pageable pageable);

和Pageable包含这3个字段

  • 采样年
  • samplingId
  • 样本信

我明白了

org.hibernate.QueryException:无法解析属性:sampleYear 来自:com.lcm.model.Samples

在示例中,我有 Samplings 类,因此我需要通过对象名称来访问 Year 和 Id...

为什么这个字段是未知的?

编辑

如果我使用 id,年份 sampleLetter

select 
    samples0_.sample_letter as sample_l1_20_0_,
    ....
from
        samples samples0_ 
    inner join
        samplings samplings1_ 
            on samples0_.sampling_id=samplings1_.id 
            and samples0_.sampling_year=samplings1_.year 
    order by
        samples0_.sampling_year asc,
        samples0_.sample_letter,
        samples0_.sampling_id,
        samples0_.sampling_year asc,
        samples0_.sample_letter asc limit ?

他们添加了比我需要的更多字段...

【问题讨论】:

    标签: hibernate jpa spring-data-jpa


    【解决方案1】:

    为什么这个字段是未知的?

    你没有在任何地方声明samplingYear。它仅出现在错误消息和 Pageable 的描述中,但既不在您的实体中,也不在您的 id-classes 中。

    也许你的意思是sampling.year

    【讨论】:

    • 通常在 spring 数据中,当您进行查询时,您会通过名称传递
    • 不确定您的意思,但您发布的代码中没有使用“samplingYear”这个名称。属性路径名总是用“.”分隔。唯一的例外是派生查询的 AFAIK 方法名称,但这仅仅是因为“。”在 Java 方法名称中不是合法字符。
    猜你喜欢
    • 2019-03-11
    • 2017-10-01
    • 1970-01-01
    • 2011-08-09
    • 2016-11-04
    • 2020-03-13
    • 1970-01-01
    • 2012-01-22
    • 2015-12-14
    相关资源
    最近更新 更多