У меня есть два предметных класса. Один - «Партнер», другой - «Клиент». Клиент может быть частью Партнера, а Партнер может иметь 1 или более Клиентов:
class Customer {
Integer id
String name
static hasOne = [partner:Partner]
static mapping = {
partner joinTable:[name:'PartnerMap',column:'partner_id',key:'customer_id']
}
}
class Partner {
Integer id
static hasMany = [customers:Customer]
static mapping = {
customers joinTable:[name:'PartnerMap',column:'customer_id',key:'partner_id']
}
}
Однако всякий раз, когда я пытаюсь определить, является ли клиент частью партнера, например:
def customers = Customer.list()
customers.each {
if (it.partner) {
println "Partner!"
}
}
Я получаю следующую ошибку:
org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; SQL [select this_.customer_id as customer1_162_0_, this_.company as company162_0_, this_.display_name as display3_162_0_, this_.parent_customer_id as parent4_162_0_, this_.partner_id as partner5_162_0_, this_.server_id as server6_162_0_, this_.status as status162_0_, this_.vertical_market as vertical8_162_0_ from Customer this_]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query
Похоже, что Grails думает, что partner_id является частью запроса Customer, а не ... Он находится в таблице PartnerMap, которая должна найти customer_id, а затем получить Partner из соответствующего partner_id.
Кто-нибудь знает, что я делаю не так?
Edit: я забыл упомянуть, что я делаю это с устаревшими таблицами базы данных. Итак, у меня есть таблица Partner, Customer и PartnerMap. В PartnerMap просто есть поля customer_id и partner_id.