繁体   English   中英

如何使 Jpql 查询在 Spring Jpa 存储库中使用可选返回?

[英]How to make a Jpql query work in Spring Jpa Repository with Optional return?

我在我的 JpaRepository 中使用 Jpql 查询。 问题是每次我调用带有可选返回的方法时,都会收到此错误:

java.lang.ClassCastException:class [Ljava.lang.Object; cannot be cast to class com.netpos.pagvendas.campaignuser.entity.CampaignUser ([Ljava.lang.Object; is in module java.base of loader 'bootstrap'; com.netpos.pagvendas.campaignuser.entity.CampaignUser is in unnamed加载器模块 org.springframework.boot.devtools.restart.classloader.RestartClassLoader @1c069e07)

这是我的存储库 class,我尝试使用的方法是:

findByCampaignCodUniqueCampaignAndCodTenant(String codUniqueCampaign, String codTenant)

@Repository
public interface CampaignUserRepository extends JpaRepository<CampaignUser, CampaignUserPk> {

    @Query("SELECT campaignUser, campaignUser.campaign from CampaignUser campaignUser " +
            "where campaignUser.codTenant = :codTenant " +
            "and campaignUser.flgFinished = false " +
            "and :now >= campaignUser.campaign.datStart and :now <= campaignUser.campaign.datEnd " +
            "order by campaignUser.datCreation ASC")
    List<CampaignUser> findActiveCampaign(String codTenant, ZonedDateTime now);

    @Query("SELECT campaignUser, campaignUser.campaign from CampaignUser campaignUser " +
            "where campaignUser.idtCampaign = :idtCampaign ")
    List<CampaignUser> findByIdtCampaign(long idtCampaign);

    @Query("SELECT campaignUser, campaignUser.campaign from CampaignUser campaignUser " +
            "where campaignUser.campaign.codUniqueCampaign = :codUniqueCampaign " +
            "and campaignUser.codTenant = :codTenant")
    Optional<CampaignUser> findByCampaignCodUniqueCampaignAndCodTenant(String codUniqueCampaign, String codTenant);
}

是否可以在 JpaRepository 中将 Optional 与 Jpql 查询一起使用?

为什么选择中有两个对象? 要通过单个查询加载CampaignUserCampaign ,您必须以这种方式启动查询

select campaignUser from CampaignUser campaignUser join fetch campaignUser.campaign campaign

甚至

from CampaignUser campaignUser join fetch campaignUser.campaign campaign

 @Query("SELECT campaignUser from CampaignUser campaignUser join fetch campaignUser.campaign campaign " +
                "where campaign.codUniqueCampaign = :codUniqueCampaign " +
                "and campaignUser.codTenant = :codTenant")
 Optional<CampaignUser> findByCampaignCodUniqueCampaignAndCodTenant(String codUniqueCampaign, String codTenant);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM