通过在控制台和 namedQuery 中执行查询得到不同的结果
different result by executing query in console and namedQuery
在我的 java Web 应用程序中,我需要从名为 VwDepositsInfo 的视图中查询存款列表(按 customerNumber)。
当我执行查询时:
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 的 resultList,但两者相同,像这样:
1-{depositTypeDesc="shortTerm"} {depositTypeCode="850"}
2-{depositTypeDesc="shortTerm"} {depositTypeCode="850"}
当我通过定义结果使其成为 nativeQuery 时 class:
Query query = entityManager.createNativeQuery("select * from VW_DEPOSIT_INFO v where v.CUSTOMER_NUMBER=:customerNo", VWDepositInfo.class);
我又得到了错误的结果。
最后我在没有定义结果的情况下尝试了 nativeQuery class:
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;
有人知道为什么会这样吗???
大众=观点?
您可能需要指定主密钥
对唯一字段使用@id :)
对于唯一的行,您可能需要多个带@id 的字段。
例如 DEPOSIT_TYPE_CODE 和 customerNumber
在我的 java Web 应用程序中,我需要从名为 VwDepositsInfo 的视图中查询存款列表(按 customerNumber)。
当我执行查询时:
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 的 resultList,但两者相同,像这样:
1-{depositTypeDesc="shortTerm"} {depositTypeCode="850"}
2-{depositTypeDesc="shortTerm"} {depositTypeCode="850"}
当我通过定义结果使其成为 nativeQuery 时 class:
Query query = entityManager.createNativeQuery("select * from VW_DEPOSIT_INFO v where v.CUSTOMER_NUMBER=:customerNo", VWDepositInfo.class);
我又得到了错误的结果。
最后我在没有定义结果的情况下尝试了 nativeQuery class:
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;
有人知道为什么会这样吗???
大众=观点? 您可能需要指定主密钥
对唯一字段使用@id :)
对于唯一的行,您可能需要多个带@id 的字段。
例如 DEPOSIT_TYPE_CODE 和 customerNumber