Ich habe zwei Domain-Klassen. Einer ist ein "Partner", der andere ist ein "Kunde". Ein Kunde kann ein Teil eines Partners sein und ein Partner 1 oder mehr Kunden hat:Grails Eins-zu-viele-Mapping mit JoinTable
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']
}
}
Jedes Mal, wenn ich versuche, zu sehen, ob ein Kunde ein Teil eines Partners ist, wie folgt aus:
bekomme ich folgende Fehlermeldung:
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
es sieht aus, als ob Grails denkt partner_id ein Teil der Kundenabfrage ist, und es ist nicht ... es ist in der PartnerMap Tabelle, die angeblich finden die customer_id, t Holen Sie den Partner von der entsprechenden Partner-ID.
Wer hat eine Ahnung, was ich falsch mache?
Edit: Ich habe vergessen zu erwähnen, ich mache das mit Legacy-Datenbanktabellen. Also habe ich eine Partner-, Kunden- und PartnerMap-Tabelle. PartnerMap hat einfach ein customer_id- und partner_id-Feld.
Hoppla, ich habe vergessen zu erwähnen, ich mache das mit altem Datenbankkram ... Also muss ich mit vordefinierten Tabellen arbeiten. Ich habe eine Kunden-, Partner- und PartnerMap-Tabelle. PartnerMap ist einfach ein Feld customer_id und partner_id. Beschränkt das mich? – intargc
Ich habe gerade festgestellt, dass dieses Problem nur besteht, wenn man versucht, dieses Zeug in die Grails-Konsole zu laden. Ich habe keine Ahnung, warum ... Ich nahm an, dass die Grails-Konsole die Umgebung ähnlich wie Rails auflädt ... – intargc
Ich habe den Code überarbeitet, aber wenn es außerhalb der Konsole funktioniert, sollte die einfachere Lösung verwendet werden. Die Konsole ist der Grails-Laufzeitumgebung sehr ähnlich, aber in der Run-App oder bei der Bereitstellung in einem Krieg ist viel los, und die Konsole nähert sich nur dieser Umgebung an. –