другой результат при выполнении запроса в консоли и namedQuery - PullRequest
1 голос
/ 10 октября 2019

в моем веб-приложении java мне нужно запросить список депозитов из представления с именем 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"
            )

, я получаю resultList с размером 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;

Кто-нибудьзнаете, почему это происходит ???

1 Ответ

1 голос
/ 13 октября 2019

VW = вид? Вам, вероятно, нужно указать главный ключ

, используйте @id для уникального поля:)

вам, вероятно, потребуется более одного поля с @id для уникальной строки.

дляПример как DEPOSIT_TYPE_CODE, так и customerNumber

...