JPAReposiry 获取所有对象而不是我想要的对象

JPAReposiry fetch all the object instead the one I want

我需要从 sql 获取通道为真 (1) 的位置,但是当我在 JPARepository 上执行相同的查询时,它会从许多 table 中获取所有行 我对 sql 的查询是这样的::

select * FROM tbl_archive A JOIN tbl_channel C ON(C.ARCHIVE_ID =A.ARCHIVE_ID)
WHERE a.identifier='NGLCRS97D12G866L' AND c.ENABLED_CHANNEL=1

我得到了这个结果(我想要这个):

when I try to do this on JPARepository:

    @Query(value = "select * FROM TBL_ARCHIVE A JOIN TBL_CHANNEL C ON(C.ARCHIVE_ID =A.ARCHIVE_ID) " +
            "WHERE a.identifier= :identifier AND c.ENABLED_CHANNEL=1", nativeQuery = true)
    Page<Archive> findChannelEnabled(@Param("identifier") String identifier, Pageable pageable);

我在 json 结果中得到了这个:

但我不需要 where is false。 我也尝试了这个查询,但没有任何改变,当获取结果时,它将获取与存档(一个)有关系的所有频道(很多)

    Page<Archive> findByIdentifierAndChannelsEnabledChannelTrue(String identifier, Pageable pageable);

我的模特是这些:

public class Archive {
    @Id
    @Column(name = "ARCHIVE_ID")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Generated(GenerationTime.ALWAYS)
    private Long archiveId;
    @Column(name = "IDENTIFIER")
    private String identifier;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "archive")
    @JsonManagedReference
    private Set<Channel> channels;
}
public class Channel {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Generated(GenerationTime.ALWAYS)
    private Long channelId;

    @ManyToOne
    @JoinColumn(name = "archive_id")
    @JsonBackReference
    private Archive archive;

    @Column(name = "Channel_Name")
    private String channelName;

    @Column(name = "ENABLED_CHANNEL")
    private Boolean enabledChannel;
}

我的服务:

public Page<Archive> getChannelEnabled(String identifier) {
        return archiveRepo.findChannelEnabled(identifier, PageRequest.of(0, 10));
    }

尝试使用 NumericBooleanType,根据定义,映射在 INTEGERBoolean 之间(使用 10).

@Column(name = "ENABLED_CHANNEL")
@Type(type = "org.hibernate.type.NumericBooleanType")
private Boolean enabledChannel;

您可以像这样修改存储库方法来做到这一点:

@Query(value = "select a FROM Archive a join fetch a.channels c where a.identifier=:identifier and c.enabledChannel=1",
            countQuery = " select count(a) from Archive a left join a.channels where a.identifier=:identifier")
Page<Archive> findChannelEnabled(@Param("identifier") String identifier, Pageable pageable);