当前位置: 首页 > 知识库问答 >
问题:

如何使Jpql查询在带有可选返回的Spring Jpa存储库中工作?

赫连俊悟
2023-03-14

我在JpaRepository中使用Jpql查询。问题是,每次使用可选返回调用方法时,都会出现以下错误:

java.lang.ClassCastException: class[Ljava.lang.Object;不能强制转换为类com.netpos.pagvendas.campaignuser.entity.活动用户([Ljava.lang.Object;在加载器'bootstrap'的模块java.base中;com.netpos.pagvendas.campaignuser.entity.活动用户在加载器的未命名模块中org.springframework.boot.devtools.restart.classloader.RestartClassLoader@1c069e07)

这是我的Repository类,我尝试使用的方法是:

findByActivgnCodUniqueActivgnAndCodTanner(String codUnique运动,String codTrener)

@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中对Jpql查询使用Optional?

共有1个答案

齐晟
2023-03-14

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

从campaignUser campaignUser join fetch campaignUser中选择campaignUser。活动活动

或者甚至

来自CampaignUser CampaignUser加入获取CampaignUser。活动活动

 @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);
 类似资料:
  • 但是,我希望将所有输入传递给iReport查询中的SQL Server存储过程。在本例中,单值输入都可以正常工作--但我无法理解如何使用muti-select--似乎不起作用,否则--因为iReport multi-select参数必须定义为java.util.Collection--我得到“Query中不支持的参数类型”。 有人能指出我缺少什么吗,或者提出一个解决办法吗?

  • 我的域类中有一个map属性,我正在尝试在存储库中创建一个查询,或者使用默认的“findByBlah”语法从数据库中提取属性。目前不起作用。我可以很容易地用SQL编写查询,但我不知道JPQL需要什么。如何使用JPQL或接口“findBy”语法从数据库中提取这些数据?无论我当前使用哪种存储库方法,当它从数据库中提取“收集器”时,属性(映射或复杂对象列表)始终为空。 域对象: 存储库: 这是在H2控制台

  • 我有一个控制器尝试用可选字段搜索。JPA实体类定义为:

  • 我希望使用SPARQL查询从sesame存储库中删除和插入三元组,并希望将这两个操作作为单个事务执行。 删除 插入 如果在事务期间抛出异常,则执行回滚...但似乎不起作用问题是,如果在插入查询期间抛出异常,则执行回滚,但之前删除的三元组没有恢复(为什么?)。 这里有一些代码: 我有一个名为OwlimConnector的类,它包装了存储库连接,并提供了一些进行SPARQL查询的方法。在这个类的构造函

  • 我试图使用JPA继承来表示这些。 nnm\U tran实体 便宜货实体 我认为到目前为止,这一切都连接正确。当我使用自定义查询附加Spring数据存储库时,我的问题就来了。 存储库 当代理该方法并执行该方法时,它会生成SQL语句,选择不同的nnm\U tran。nnm\U tran t1 LEFT OUTER JOIN io\U plan t0 ON(t1.plan\U number=t0.pla

  • 我只是想知道是否可以创建一个JQPL查询,该查询将对表进行处理,并选择所有记录,这些记录至少与我传递给查询的对象的y个属性中的x个ouf匹配。假设汽车对象有5个属性:maxSpeed、weight、Colory、power、type,然后我想查询一个数据库,以获得所有至少有2个属性与我传递给查询的汽车相同的汽车(不是实际的汽车--只是它的属性)。我找不到任何东西,所以我只是获取至少有一个属性匹配的