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

当使用union all语句进行本机查询时,如何使用JpaRepository操作(findOne)

陆洲
2023-03-14

我需要将JpaRepository与一个包含union语句的查询一起使用。可能吗?这是我当前的实现,也是我迄今为止遇到的错误:

实体:

@Entity
public class PaymentDetails {
  @Id
  @Column
  private String id;
  @Enumerated(EnumType.STRING)
  @Column(name = "rowtype")
  private PaymentType paymentType;
  @Embedded
  private CardDetails cardDetails;
  @Embedded
  private BankAccountDetails bankAccountDetails;

界面和查询:

public interface PaymentsRepositoryManagerPayment1 extends JpaRepository<PaymentDetails,String> {
  @Query(value = "select id,'CARD' as rowtype, cardnumber, cardtype, nameoncard, expirydate, startdate, securitycode, semafonecr, issuenumber, "
        + "null accountnumber, null accountholdername, null sortcode, null bic, null iban, null currency from pcs.BsbTempCardDetails "
        + "where id = :id union all select id, 'BANK' as rowtype, null cardnumber, null cardtype, null nameoncard, null expirydate, null startdate, "
        + "null securitycode, null semafonecr, null issuenumber, accountnumber, accountholdername, sortcode, bic, iban, currency "
        + "from pcs.BsbTempBankAccountDetails where id = :id", nativeQuery = true) <br>
List< PaymentDetails > findPaymentDetails(@Param("id") String id);

呼叫:

@Autowired private PaymentsRepositoryManagerPayment1 paymentsRepositoryManagerPayment1;
@Transactional(value = "paymentsRepositoryTransactionManager")
public PaymentDetails retrievePaymentDetailsById1(String id) {
  return paymentsRepositoryManagerPayment1.findOne(id);
}

错误:

组织。springframework。刀。InvalidDataAccessResourceUsageException:无法加载实体:[com.bskyb.repository.payments.model.PaymentDetails#cardd];SQL[选择PaymmentDet0_0.id作为ID20000.PaymmentDe00.PaymmentDe0.PaymentDe000,PaymmentDe00。Account数字作为Account3220000,PaymmentDe00.PaymmentDe0.id作为ID20.id作为id2.id作为ID20,PaymmentDe00.PaymmentDe0.AccountDe0。PaymmentDe0.PaymentDe0.PaymentDe0.PaymentDe0。PaymentDe0。PaymentDe0000。PaymentDe00。PaymentDe00。作为accountnumber作为Accum22222222222222222222222222_0_,付钱给我ntdet0_2;。issuenumber为issuenu11_2_0_0,paymentdet0_0。nameoncard作为nameoncard2_0_,paymentdet0_。证券代码为Security13_2_0_,paymentdet0_。startdate为startdate 2_0_,paymentdet0_。rowtype为rowtype2_0_u来自PaymentDetails paymentdet0_u其中paymentdet0_u。id=?];嵌套的异常是org。冬眠例外SQLGrammarException:无法加载实体:[com.bskyb.repository.payments.model.PaymentDetails#cardd]java。sql。SQLSyntaxErrorException:ORA-00942:表或视图不存在

共有1个答案

祝高阳
2023-03-14

你展示的所有内容似乎都与你看到的例外没有太大关系:

  1. 异常抱怨表不可用。在发出查询时,请确保Payment细节存在(这可能是您看到异常的原因)。
  2. 您调用findOne(...)。因此findPayment细节(...)上的查询声明在用例中根本不起作用。
 类似资料:
  • 使用 Raw SQL 查询,无需使用 ORM 表定义 多数据库,都可直接使用占位符号 ?,自动转换 查询时的参数,支持使用 Model Struct 和 Slice, Array ids := []int{1, 2, 3} p.Raw("SELECT name FROM user WHERE id IN (?, ?, ?)", ids) 创建一个 RawSeter o := orm.NewOrm

  • 编辑-上下文:我正在使用Talend ETL工具,并在查询中使用ISODate或Date或new Date,如以下错误导致失败,因此我需要解决方法: 如果没有以下错误,我无法做到这一点: 大概是因为ETL工具调用: 考虑到我无法在com的查询中使用新日期()。mongodb。util。JSON。parse()方法,是否有解决方法? 我正在使用MongoDB v2.6.3,无法让$date运算符工作

  • 我在mysql表中有一个int列,用于存储与状态相关的位。我对基于状态字段中是否设置了一个或多个位的查询感兴趣。 我尝试了以下方法:

  • 问题内容: 这是SQL中的JOIN问题更新语句的扩展,但是我尝试使用Spring Data JPQL。 我正在尝试将更新与JPQL中的JOIN一起使用,如下所示 但是,我得到如下错误 org.hibernate.hql.internal.ast.QuerySyntaxException:期望“设置”,找到“ JOIN” JPQL中无法进行UPDATE和JOIN吗?有什么选择。谢谢 问题答案: 该J

  • 问题内容: 问题是获取表列数据并将其用作IN函数的值列表。 在此示例中,我创建了2个表格:电影和流派 表“电影”包含3列:id,名称和类型。表“类型”包含2列:id和name。 这两个表都包含一些伪数据: 我的目标是获得这样的结果: 我正在使用此查询,并且部分起作用的唯一问题是它使用IN值列表中字段的第一个值。 结果与我想要的结果有很大的不同: 抱歉,如果我错过了一些数据,我是mysql的新手。

  • 问题内容: Iam使用 searchkick 库作为 Elasticsearch 客户进行产品搜索。 https://github.com/ankane/searchkick 可以创建“ OR”条件和“ AND”条件; AND操作 Product.search,其中:{价格:{lte:200},in_stock:true} 或操作 Product.search,其中:{或:[[{{in_stock