通过在控制台和 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