【发布时间】:2020-02-07 15:45:49
【问题描述】:
在我的 java web 应用程序中,我需要通过 customerNumber 从名为 VwDepositsInfo 的视图中查询存款列表。
当我执行查询时:
select * from VW_DEPOSIT_INFO v where v.CUSTOMER_NUMBER=:customerNo
在数据库控制台中,我的 resultList 大小为 2,并且有这样的内容:
1-{depositTypeDesc="shortTerm"} {depositTypeCode="850"}
2-{depositTypeDesc="longTerm"} {depositTypeCode="2"}
但是当我测试包含 namedQuery 的代码时:
@NamedQuery(
name = "inquireAccountByCustomerNumber",
query = "select c from VWDepositInfo c where c.customerNumber=:customerNo"
)
我得到一个大小为 2 的结果列表,但两者都一样,像这样:
1-{depositTypeDesc="shortTerm"} {depositTypeCode="850"}
2-{depositTypeDesc="shortTerm"} {depositTypeCode="850"}
当我通过定义结果类使其成为 nativeQuery 时:
Query query = entityManager.createNativeQuery("select * from VW_DEPOSIT_INFO v where v.CUSTOMER_NUMBER=:customerNo", VWDepositInfo.class);
我又得到了错误的结果。
最后我在没有定义结果类的情况下尝试了 nativeQuery:
Query query = entityManager.createNativeQuery("select * from VW_DEPOSIT_INFO v where v.CUSTOMER_NUMBER=:customerNo");
结果和我预期的一样。
这是我的 VwDepositsInfo.class:
@Entity
@Table(name = "VW_DEPOSIT_INFO")
@Audited(withModifiedFlag = false)
@NamedQueries(
{@NamedQuery(
name = "inquireAccountByCustomerNumber",
query = "select c from VWDepositInfo c where c.customerNumber=:customerNo"
)
}
)
public class VWDepositInfo implements Serializable {
@Id
@Column(name = "CUSTOMER_NUMBER")
private Long customerNumber;
@Column(name = "BRANCH_CODE")
private Long branchCode;
@Column(name = "DEPOSIT_TYPE_CODE")
private Long depositTypeCode;
@Column(name = "DEPOSIT_SERIAL")
private Long depositSerial;
@Column(name = "DEPOSIT_TYPE_DESC")
private String depositTypeDesc;
@Column(name = "CURRENCY_TYPE_DESC")
private String currencyTypeDesc;
@Column(name = "DEPOSIT_OPEN_DATE")
private Date depositOpenDate;
有人知道为什么会这样吗???
【问题讨论】:
-
没有您的实际
VWDepositInfo这是不可能的。 JPQL 根据VWDepositInfo中的映射被翻译成SQL。检查执行的查询,这可能与您的普通 SQL 查询不同。还要确保你有正确的equals和hashCode方法。 -
@M.Deinum 我已经添加了课程
标签: java hibernate named-query nativequery