Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> NativeQuery & return-join, Мепинг полей в NativeQuery для OneToMany 
V
    Опции темы
MisterCleric
Дата 22.7.2008, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Привет всем. Столкнулся с проблемой join-запроса
такие у меня сущности

Код

@Entity
@org.hibernate.annotations.Entity(mutable = false, dynamicInsert = true, dynamicUpdate = true)
@org.hibernate.annotations.AccessType("field")
public class AgentStub implements Serializable, Cloneable {
    @Column(name = "FULLNAME")
    private String name;

    @Id
    @Column(name = "ID")
    private Long id;

    @Column(name = "PARENT")
    private Long parent;

    @Column(name = "AGENTNO")
    private Long agentNo;

    @Transient
    private String labelName;

    @OneToMany
    @JoinColumn(name = "INSURANCEPOLICYID")
    private List<AgentPolicyStub> policies = new ArrayList<AgentPolicyStub>();
}


Код

@Entity
@org.hibernate.annotations.Entity(mutable = false, dynamicInsert = true, dynamicUpdate = true)
@org.hibernate.annotations.AccessType("field")
public class AgentPolicyStub implements PolicyPrototype {
    @Column(name = "POLICYNO")
    private String number;

    @Id
    @Column(name = "ID")
    private Long id;


    @Column(name = "STATE")
    private Long status;

    @Column(name = "REDUCED")
    private Long reduced;

//    @Transient
    @Column(name = "AGENTID")
    private Long agentId;
}


ну и там гэтеры/сэтеры еще есть

вот такой непростой запросик на это дело 

Код

<sql-query name="agentStructure">
        <!--<return class="com.cs.lisa.datadispatcher.entity.AgentStub"/>-->
        <return alias="s" class="com.cs.lisa.datadispatcher.entity.AgentStub"/>
        <return-join alias="p" property="s.policies"/>

        SELECT {s.*},
        a.agentid as {p.agentid},
        p.id as {p.id},
        p.policyno as {p.number},
        p.insurancepolicystateid as {p.status},
        p.isreduced as {p.reduced}
        FROM (SELECT t.agentid ID, t.providerid PARENT, t.agentno agentno,
        a.descriptor fullname FROM (
        SELECT t.*
        FROM lisaagencystructure t
        WHERE t.agencynetworkid IN (
        SELECT ID
        FROM lisaagencynetwork
        WHERE networkid IN (SELECT ID
        FROM lisaagencynetworklist
        WHERE saleproviderid = :brokerNo)
        AND followid IS NULL)
        ) t, lisaagents a
        WHERE a.ID = t.agentid
        CONNECT BY PRIOR t.agentid = t.providerid
        START WITH t.agentno = :agentNo) s,
        LISAINSURANCEPOLICY p, lisapolicyagent a
        WHERE a.agentid(+) = s.id
        and a.insurancepolicyid=p.id
        and p.validfrom &lt;= TRUNC(SYSDATE) AND p.validtill > TRUNC(SYSDATE)
        and p.insurancepolicystateid not in (0, 6)
        order by s.id, p.id
    </sql-query>


вроде все как по доке
но получаю exception "No column name found for property ... for alias [p]"



--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
MisterCleric
Дата 22.7.2008, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Я так вижу никто пока с такими проблемами не сталкивался... Наверное такие сложности продолжаете делать через JDBC
 У меня проблема решилась так:
1. изменил запрос 
Код

<sql-query name="agentStructure">
        <return alias="s" class="com.cs.lisa.datadispatcher.entity.AgentStub"/>
        <return-join alias="p" property="s.policies"/>
        SELECT {s.*},
        {p.*}
        FROM (SELECT t.agentid ID, t.providerid PARENT, t.agentno agentno,
        a.descriptor fullname FROM (
        SELECT t.*
        FROM lisaagencystructure t
        WHERE t.agencynetworkid IN (
        SELECT ID
        FROM lisaagencynetwork
        WHERE networkid IN (SELECT ID
        FROM lisaagencynetworklist
        WHERE saleproviderid = :brokerNo)
        AND followid IS NULL)
        ) t, lisaagents a
        WHERE a.ID = t.agentid
        CONNECT BY PRIOR t.agentid = t.providerid
        START WITH t.agentno = :agentNo) s,
        (SELECT a.agentid,
        p.id,
        p.policyno,
        p.insurancepolicystateid state,
        p.isreduced reduced
        FROM LISAINSURANCEPOLICY p, lisapolicyagent a
        WHERE a.insurancepolicyid=p.id
        and p.validfrom &lt;= TRUNC(SYSDATE) AND p.validtill > TRUNC(SYSDATE)
        and p.insurancepolicystateid not in (0, 6)
        ) p
        WHERE p.agentid(+) = s.id
        order by s.id, p.id
      
    </sql-query>



правда немного дольше стал работать. Ну эт такое дело он вызываеться один раз при логине пользователя

а в коде добавил такое:

Код

public List<AgentStub> getAgentStructure(Agent agent) {
  List structure = ((Session) manager.getDelegate()).getNamedQuery("agentStructure")
                .setParameter("agentNo", agent.getAgentNo())
                .setParameter("brokerNo", agent.getBrokerNo())
                .setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP)
                .list();

return transformAgentStructure(structure);
    }

    private List transformAgentStructure(List result) {
        List<AgentStub> agents = new ArrayList<AgentStub>();
        for (Object aResult : result) {
            Map map = (Map) aResult;
            AgentStub agent = (AgentStub) map.get("s");
            agents.add(agent);
        }
        return new DistinctRootEntityResultTransformer().transformList(agents);
    }


и все нормально получил


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0408 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.