我需要從 sql 中獲取通道為真 (1) 的位置,但是當我在 JPARepository 上執行相同的查詢時,它會從許多表中獲取所有行,我在 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 是假的。我也嘗試過這個查詢,但沒有任何改變,當獲取結果時,它將獲取與存檔(一個)有關系的所有頻道(很多)
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));
}
uj5u.com熱心網友回復:
您可以通過像這樣修改您的存盤庫方法來做到這一點:
@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);
uj5u.com熱心網友回復:
嘗試使用NumericBooleanType,根據定義,它在and之間映射(使用and )。INTEGERBoolean10
@Column(name = "ENABLED_CHANNEL")
@Type(type = "org.hibernate.type.NumericBooleanType")
private Boolean enabledChannel;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/459157.html
