2010-02-15 5 views
0
select 
     b.security_type, 
     b.symbol, 
     b.security_description, 
     b.trade_date_qty as 'axys_qty', 
     c.trade_date_qty as 'fidelity_qty', 
     c.trade_date_qty - b.trade_date_qty as 'qty_diff', 
     b.cost_basis as 'axys_cost', 
     c.cost_basis as 'fidelity_cost', 
     c.cost_basis - b.cost_basis as 'cost_diff' 
    from 
     account a 
     inner join advent_position b on a.fixed_account_number = b.account_number 
     inner join fidelity_position c on a.fixed_account_number = c.account_number and b.symbol = c.symbol 
    where 
     b.account_number = '636296651' 

기본적으로 나는 ff를가집니다. 도메인 : 계정, AdventPosition, FidelityPosition. 아직 관계를 설정하지 않았습니다. 위의 로직을 Criteria 또는 HQL을 사용하여 복제하는 방법이 있는지 궁금합니다. 저를 용서하십시오, 나는 Grails에 아직도 새롭다.이 SQL 문을 GORM으로 변환하는 데 도움이 필요합니다.

감사합니다.

답변

0

이 가까이에 뭔가있을 것 : 당신은 내가 하드를 교체

for (row in results) { 
    def securityType = row[0] 
    def symbol = row[1] 
    def securityDescription = row[2] 
    def axys_qty = row[3] 
    def fidelity_qty = row[4] 
    def qty_diff = row[5] 
    def axys_cost = row[6] 
    def fidelity_cost = row[7] 
    def cost_diff = row[8] 
} 

처럼 뭔가를 반복 할 수 있도록

String hql = ''' 
select 
    b.securityType, 
    b.symbol, 
    b.securityDescription, 
    b.tradeDateQty, 
    c.tradeDateQty, 
    c.tradeDateQty - b.tradeDateQty, 
    b.costBasis, 
    c.costBasis, 
    c.costBasis - b.costBasis 
from 
    Account a, AdventPosition b, FidelityPosition c 
where 
    a.fixedAccountNumber = b.accountNumber 
    and a.fixedAccountNumber = c.accountNumber 
    and b.symbol = c.symbol 
    and b.accountNumber = :accountNumber 
''' 

def accountNumber = '636296651' 
def results = Account.executeQuery(hql, [accountNumber: accountNumber]) 

결과는 객체 []의 ArrayList를 할 것이다 명명 된 매개 변수가있는 코드화 된 계정 번호. 규칙적으로 사용할 수 있습니까? SQL에서와 마찬가지로 'def results = Account.executeQuery (hql, [accountNumber])'를 실행하고 하드 코딩을 시도한 다음이를 복원하고 두 번째 매개 변수를 전달하지 않으면 실행 '데프 결과 = Account.executeQuery (HQL)'

+0

완벽한 답변! 대단히 감사합니다! – firnnauriel

0

단지 (대답을 기다리는 동안 : P) 내가 와서 솔루션을 공유하지만 빨리 이전의 대답은 방법 훨씬 더주의하고 :

def acc = Account.findByFixedAccountNumber('636296651') 
List advPos = AdventPosition.findAllByAccountNumber('636296651') 
List fidPos = advPos.collect { 
    FidelityPosition.findAllByAccountNumberAndSymbol('636296651', it.symbol) 
} 

def item = [:] 
def res = [] 

def limit = advPos.size() - 1 
for(i in 0..limit){ 
    item.security_type = advPos[i].securityType 
    item.symbol = advPos[i].symbol 
    item.security_description = advPos[i].securityDescription 
    item.axys_qty = advPos[i].tradeDateQty 
    item.fidelity_qty = fidPos[i].tradeDateQty 
    item.qty_diff = item.fidelity_qty - item.axys_qty 
    item.axys_cost = advPos[i].costBasis 
    item.fidelity_cost = fidPos[i].costBasis 
    item.cost_diff = item.fidelity_cost - item.axys_cost 
    res.add(item) 
} 
관련 문제