У меня есть два класса домена с множеством карт.Grails определяет свойство отображения в имеет много отношений
Один класс:
class Line {
static belongsTo = [header : Header]
Long invoiceId
Long lineNumber
Long oneId
Long secondId
Long thirdId
static mapping = {
table('LINES_2_V')
version(false)
id composite: ['invoiceId', 'lineNumber']
}
}
другой класс:
class Header {
static hasMany = [lines: Line]
Long id
static mapping = {
table('HEADERS_2_V')
version(false)
id column:'INVOICE_ID'
}
}
Createria:
Header.createCriteria().list() {
createAlias('Lines', 'l', CriteriaSpecification.INNER_JOIN)
if (oneId) {
eq('l.oneId', oneId)
} else {
isNull('l.oneId')
}
if (secondId) {
eq('l.secondId', secondId)
}else {
isNull('l.secondId')
}
if (thirdId) {
eq('l.thirdId', thirdId)
}else {
isNull('l.thirdId')
}
}
и я получаю следующее сообщение об ошибке:
ORA-00904: "L1_"."HEADER_ID": invalid identifier
Hibernate генерироваться выберите выглядит следующим образом:
Hibernate: select * from (select this_.INVOICE_ID as INVOICE1_0_1_
from HEADERS_2_V this_,
LINES_2_V ihl1_ where this_.INVOICE_ID=l1_.header_id and ihl1_.project_id is null
and ihl1_.transaction_id is null and ihl1_.po_header_id is null) where rownum <= ?
почему он пытается отобразить на HEADER_ID
? как сделать это на карту INVOICE_ID
?
спасибо, вы открыли мне глаза, мне нужно было использовать однонаправленные отношения много к одному, потому что только заголовки заботятся о линиях. Из строки i не нужно добираться до заголовка. Спасибо, ты спас мне жизнь. – kuldarim