2014-09-12 5 views
1

У меня есть две модели:JRuby rails4 eager_load не работает

class Transaction < ActiveRecord::Base 
    self.table_name = 'DEPOSIT_TRANSACTIONS' 
    belongs_to :deposit_account  
    scope :not_test, -> { includes(:deposit_account).where("deposit_accounts.is_test_account is null or deposit_accounts.is_test_account != 1").references(:deposit_account) } 
    ... 
end 

class DepositAccount < ActiveRecord::Base  
    has_many :transactions, -> { order(:creation_date => :desc) } 
    default_scope { where(:purpose => 'COUNTERFEIT') } 
    scope :not_test, -> { where("is_test_account != 1") } 
    ... 
end 

Я пытался нетерпеливого нагрузки на обе таблицы с:

irb(main):008:0> request_transactions = Transaction.eager_load(:deposit_account) 
**I polish the following output** 
    SQL (6390.0ms) SELECT "DEPOSIT_TRANSACTIONS"."ID"     AS t0_r0, 
        "DEPOSIT_TRANSACTIONS"."DEPOSIT_ACCOUNT_ID"   AS t0_r1, 
        "DEPOSIT_TRANSACTIONS"."TRANSACTION_TYPE"   AS t0_r2, 
        "DEPOSIT_TRANSACTIONS"."TRACKING_ID"    AS t0_r3, 
        "DEPOSIT_TRANSACTIONS"."AMOUNT"      AS t0_r4, 
        "DEPOSIT_TRANSACTIONS"."STATUS"      AS t0_r5, 
        "DEPOSIT_TRANSACTIONS"."TRANSACTION_COMMENT"  AS t0_r6, 
        "DEPOSIT_TRANSACTIONS"."NOTIFICATION_EMAILS"  AS t0_r7, 
        "DEPOSIT_TRANSACTIONS"."CREATED_BY"     AS t0_r8, 
        "DEPOSIT_TRANSACTIONS"."CREATION_DATE"    AS t0_r9, 
        "DEPOSIT_TRANSACTIONS"."LAST_UPDATED_BY"   AS t0_r10, 
        "DEPOSIT_TRANSACTIONS"."LAST_UPDATED_DATE"   AS t0_r11, 
        "DEPOSIT_TRANSACTIONS"."FINISH_DATE"    AS t0_r12, 
        "DEPOSIT_TRANSACTIONS"."PAYMENT_DATE"    AS t0_r13, 
        "DEPOSIT_TRANSACTIONS"."MATCH_TYPE"     AS t0_r14, 
        "DEPOSIT_TRANSACTIONS"."ADDITIONAL_INFO"   AS t0_r15, 
        "DEPOSIT_ACCOUNTS"."ID"        AS t1_r0, 
        "DEPOSIT_ACCOUNTS"."SELLER_ID"      AS t1_r1, 
        "DEPOSIT_ACCOUNTS"."MARKETPLACE_ID"     AS t1_r2, 
        "DEPOSIT_ACCOUNTS"."PURPOSE"      AS t1_r3, 
        "DEPOSIT_ACCOUNTS"."TOTAL_DEPOSIT_BALANCE"   AS t1_r4, 
        "DEPOSIT_ACCOUNTS"."OUTSTANDING_DEPOSIT_REQUEST" AS t1_r5, 
        "DEPOSIT_ACCOUNTS"."OUTSTANDING_REFUND_REQUEST"  AS t1_r6, 
        "DEPOSIT_ACCOUNTS"."CREATED_BY"      AS t1_r7, 
        "DEPOSIT_ACCOUNTS"."CREATION_DATE"     AS t1_r8, 
        "DEPOSIT_ACCOUNTS"."LAST_UPDATED_BY"    AS t1_r9, 
        "DEPOSIT_ACCOUNTS"."LAST_UPDATED_DATE"    AS t1_r10, 
        "DEPOSIT_ACCOUNTS"."IS_TEST_ACCOUNT"    AS t1_r11, 
        "DEPOSIT_ACCOUNTS"."RECORD_VERSION_NUMBER"   AS t1_r12, 
        "DEPOSIT_ACCOUNTS"."OUTSTANDING_CONFISCATE_REQUEST" AS t1_r13 
        FROM "DEPOSIT_TRANSACTIONS" 
        LEFT OUTER JOIN "DEPOSIT_ACCOUNTS" 
        ON "DEPOSIT_ACCOUNTS"."ID"  = "DEPOSIT_TRANSACTIONS"."DEPOSIT_ACCOUNT_ID" 
        AND "DEPOSIT_ACCOUNTS"."PURPOSE" = 'COUNTERFEIT' 

    DepositAccount Load (235.0ms) SELECT "DEPOSIT_ACCOUNTS".* FROM "DEPOSIT_ACCOUNTS" WHERE "DEPOSIT_ACCOUNTS"."PURPOSE" = 'COUNTERFEIT' AND "DEPOSIT_ACCOUNTS"."ID" = 143 AND ROWNUM <= 1 
    DepositAccount Load (535.0ms) SELECT "DEPOSIT_ACCOUNTS".* FROM "DEPOSIT_ACCOUNTS" WHERE "DEPOSIT_ACCOUNTS"."PURPOSE" = 'COUNTERFEIT' AND "DEPOSIT_ACCOUNTS"."ID" = 143 AND ROWNUM <= 1 
    DepositAccount Load (471.0ms) SELECT "DEPOSIT_ACCOUNTS".* FROM "DEPOSIT_ACCOUNTS" WHERE "DEPOSIT_ACCOUNTS"."PURPOSE" = 'COUNTERFEIT' AND "DEPOSIT_ACCOUNTS"."ID" = 147 AND ROWNUM <= 1 
    DepositAccount Load (237.0ms) SELECT "DEPOSIT_ACCOUNTS".* FROM "DEPOSIT_ACCOUNTS" WHERE "DEPOSIT_ACCOUNTS"."PURPOSE" = 'COUNTERFEIT' AND "DEPOSIT_ACCOUNTS"."ID" = 138 AND ROWNUM <= 1 
    ... 

Но это порождает так много SQL, что означает рельсы Безразлично Думаю, с нетерпением. Я ожидал, что первое предложение будет достаточно. Пожалуйста, помогите загружать таблицы. Благодарю.

Моя среда:
JRuby 1,7
рельсы 4,0

EDIT1:
Я попытался запустить тот же код на Ruby 1.9 Рельсы 4.0, нетерпеливый нагрузки работает отлично. Поэтому я предполагаю, что это вызвано JRuby. Кто-нибудь еще сталкивался с этой проблемой?

Не знаю, имеет ли значение, я использую activerecord-oracle_enhanced-adapter в ruby ​​1.9 env, но драйвер JDBC в JRuby. База данных это оракул.

+0

Я подозреваю, что сгенерированный SQL, который не создается Transaction.eager_load (: deposit_account) или вашей моделью транзакций, что-то не хватает. Причина, по которой создается сгенерированное условие соединения. Где это: И «DEPOSIT_ACCOUNTS». «ЦЕЛЬ» = «COUNTERFEIT»? –

+0

@tobago «DEPOSIT_ACCOUNTS». «НАЗНАЧЕНИЕ» = «COUNTERFEIT» поступает из default_scope {где (: purpose => 'BOOK')}, которое я допустил при отправке вопроса, оно должно быть default_scope {where (: purpose = > «COUNTERFEIT»)}. – user1578696

+0

Я все еще подозреваю, что сгенерированный SQL, не созданный Transaction.eager_load (: deposit_account), или ваша модель транзакции чего-то не хватает. belongs_to:: alone_account не будет генерировать комбинированное условие объединения, например: ON «DEPOSIT_ACCOUNTS». «ID» = «DEPOSIT_TRANSACTIONS». «DEPOSIT_ACCOUNT_ID» И «DEPOSIT_ACCOUNTS». «НАЗНАЧЕНИЕ» = «COUNTERFEIT» –

ответ

0

Проблема решается путем обновления activerecord от activerecord-4.0.9 до activerecord-4.1.5. BTW, я использую activerecord-jdbc-adapter-1.3.7 в качестве адаптера.

Смежные вопросы