У меня есть две таблицы, которые не связаны напрямую с внешним ключом.
@Entity
@Getter
@Setter
@NoArgsConstructor
@IdClass(CodeTablePK.class)
public class Codetable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "codetable_Sequence")
@SequenceGenerator(name = "codetable_Sequence", sequenceName = "CODETABLE_SEQ", allocationSize = 1)
private Integer codeId;
@Id
private String codeType;
private Long labelId;
}
@Entity
@Getter
@Setter
@NoArgsConstructor
@IdClass(LabelPK.class)
public class Label extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "label_Sequence")
@SequenceGenerator(name = "label_Sequence", sequenceName = "LABEL_SEQ", allocationSize = 1)
private Long labelId;
@Id
private String labelLanguage;
private String labelText;
}
@Getter
@Setter
@AllArgsConstructor
@EqualsAndHashCode
public class LabelPK implements Serializable {
private Long labelId;
private String labelLanguage;
}
Я создал запрос, чтобы связать обе таблицы по их labelId. Проекция не отображается
@Repository
public interface CodetableRepository extends JpaRepository<Codetable, Long> {
@Query(value = "select c.codeId, l.labelId, l.labelLanguage, l.labelText from Codetable c inner join Label l on c.labelId=l.labelId where c.codeType=:codeType")
public List<CodetablePayload> findByCodeType(@Param("codeType") String codeType);
}
public interface CodetablePayload {
Integer getCodeId();
Long getLabelId();
String getLabelLanguage();
String getLabelText();
}
Выполненный запрос в порядке
select
codetable0_.code_id as col_0_0_,
label1_.label_id as col_1_0_,
label1_.label_language as col_2_0_,
label1_.label_text as col_3_0_
from
codetable codetable0_
inner join
label label1_
on (
codetable0_.label_id=label1_.label_id
)
where
codetable0_.code_type=?
В sql, которые возвращают мне две строки.
Jpa возвращает мне два объекта с нулевым значением .
Почему сопоставление не сделано