Клонировал код из учебника: База данных на каждого арендатора Multi-Tenancy
Я пошел в законченный проект и начал играть с вещами.
Я понимаю, какприложение разрешает идентификаторы арендаторов и без труда подключается к различным источникам данных.
Что заставляет меня чесать голову, так это создавать другие типы отношений.
Пример, показанный в руководстве, демонстрируетотношения многие ко многим.То, что я хочу использовать, - это однонаправленные отношения один-к-одному.
Естественно, я думал сделать это, чтобы сделать простое изменение.Я изменил файл Vehicle.groovy и VehicleService.groovy
Вот мои версии файлов:
//Vehicle.groovy
package example
import grails.gorm.MultiTenant
class Vehicle implements MultiTenant<Vehicle> { // <1>
String model
Integer year
Engine engine
static constraints = {
model blank:false
year min:1980
}
}
//VehicleService.groovy
package example
// tag::class[]
import grails.gorm.multitenancy.CurrentTenant
import grails.gorm.services.Join
import grails.gorm.services.Service
import grails.gorm.transactions.Transactional
import groovy.transform.CompileStatic
@Service(Vehicle) // <1>
@CurrentTenant // <2>
@CompileStatic
abstract class VehicleService {
// end::class[]
// tag::queries[]
@Join('engine') // <1>
abstract List<Vehicle> list(Map args ) // <2>
abstract Integer count() // <3>
@Join('engine')
abstract Vehicle find(Serializable id) // <4>
// end::queries[]
// tag::save[]
abstract Vehicle save(String model,
Integer year)
// end::save[]
// tag::update[]
@Transactional
Vehicle update( Serializable id, // <5>
String model,
Integer year) {
Vehicle vehicle = find(id)
if (vehicle != null) {
vehicle.model = model
vehicle.year = year
vehicle.save(failOnError:true)
}
vehicle
}
// end::update[]
// tag::delete[]
abstract Vehicle delete(Serializable id)
// end::delete[]
}
Это не дает желаемого результата.Создается следующая ошибка времени выполнения:
Как исправить эту ошибку и установить правильные отношения?Какую основную концепцию мне здесь не хватает?Я знаю его SQL под капотом, но почему не работает объединение столбцов?
Не будет ли сгенерированный запрос чем-то вроде:
SELECT * FROM Vehicles
JOIN Engines
WHERE Vehicles.ID = WHATEVER
ON Vehicles.engine_id= Engines.id