запрос гибернации, выдающий неверный список результатов - PullRequest
0 голосов
/ 25 ноября 2018

это метод Dao layer List,

public List<PortfolioMemberView> getPortfolioMemberViewByPid(Integer pid){
    //check the portfolioId value in console
    System.out.print(pid);
    try {
        Session session = sessionFactory.getCurrentSession();
        String sql = "from PortfolioMemberView pv where pv.portfolioId = ?0";
        Query query = session.createQuery(sql).setParameter(0, pid);
        List<PortfolioMemberView> pmvl = query.list();
        //check the result list by assetCode in console
        for(PortfolioMemberView pv: pmvl){
            System.out.print(pv.getAssetCode());
        }
        return pmvl;
    }catch(Exception e){
        logger.info("操作失败:"  + e.getMessage() + ", " +e.getCause());
        throw new RuntimeException();
    }

У меня есть представление (которое я создаю) PortfolioMemberView в моей базе данных, и оно имеет следующие данные

inmage

, когда я задействую метод, консоль напечатает следующий результат.

2
Hibernate: select portfoliom0_.portfolioId as portfoli1_8_, 
portfoliom0_.assetId as assetId2_8_, portfoliom0_.accountType as accountT3_8_, portfoliom0_.assetCode as assetCod4_8_, portfoliom0_.assetLabel as assetLab5_8_, portfoliom0_.value_ as value_6_8_, portfoliom0_.annualReturn as annualRe7_8_, portfoliom0_.returnRate as returnRa8_8_ from PortfolioMemberView portfoliom0_ where portfoliom0_.portfolioId=?
CMPROP0121CMPROP0121CMPROP0121CMPROP0121CMPROP0121

Ожидаемый результат должен быть CMPROP0121kckbGYck, потому что когда portfolioId = 2, assetCode трех объектов в результирующемсписок должен быть CMPROP0121 , kckb , GYck.

Я также копирую сгенерированный запрос hibenate и запускаю его в базе данных mysql, и результат правильный.

    Hibernate: select portfoliom0_.portfolioId as portfoli1_8_, 
portfoliom0_.assetId as assetId2_8_, portfoliom0_.accountType as accountT3_8_, portfoliom0_.assetCode as assetCod4_8_, portfoliom0_.assetLabel as assetLab5_8_, portfoliom0_.value_ as value_6_8_, portfoliom0_.annualReturn as annualRe7_8_, portfoliom0_.returnRate as returnRa8_8_ from PortfolioMemberView portfoliom0_ where portfoliom0_.portfolioId=?

не уверен, что не так, пожалуйстапомогите !!!

1 Ответ

0 голосов
/ 26 ноября 2018

Я назначил портфолио в качестве основного идентификатора, и основной идентификатор не может быть дублирован.но очевидно, что первичный ключевой идентификатор портфолио дублирован.Я делаю другой первичный ключ портфолиоMemberId, и проблема решена

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...