Ich habe drei Domain-Klassen User
, Employee
und UserEmployee
.Grails falscher Alias, der Fehler verursacht ORA-00904
class User {
String username
//more atributes omitted
static hasMany = [ userEmployees : UserEmployee ]
static mapping = {
version false
table 'myUserTable'
id column: 'username', name: 'username'
}
}
class Employee {
long employeeCode
//more atributes omitted
static hasMany = [ userEmployees : UserEmployee ]
static mapping = {
id column: 'myColumn', name: 'employeeCode'
version false
table 'myViewHere'
}
}
class UserEmployee implements Serializable {
User user
Employee employee
static belongsTo = [ user : User, employee : Employee ]
static mapping = {
version false
table 'myRelationTable'
id composite: ['user','employee']
user(column: "username")
employee(column: "myColumn")
}
}
Wenn ich versuche, alle Mitarbeiter abzufragen, dass einige Benutzer zugreifen kann, erhalte ich die ORA-00904-Fehler:
println UserEmployee.withCriteria {
projections {
user {
eq('username', 'SOMEUSER')
}
}
}
Die Hibernatefunktion Ausgang ist so etwas wie folgt aus:
Hibernate: select * from (select this_.username as usuario27_0_, from myUserTable this_ where this_.username=?) where rownum <= ?
Hibernate: select this_.username as usuario24_0_, this_.code_employee as cod2_24_0_ from myRelationalTable this_ where (usu_alias1x1_.username=?)
Warum wird der Alias usu_alias1x1_
erstellt?
P.S .: Ich habe die Namen und Felder der Domänenklassen geändert, um sie besser zu verstehen. Vielleicht wird es irgendwo einen Tippfehler geben.
EDIT
ich eine Datenbank bin zuordnen, die bereits vorhanden und kann auf die Grails Standard nicht verändert haben die PK. Also verwende ich die id column
, um die Schlüssel zu deklarieren.
Mit nur Spalte wird die Zuordnung verstehen, dass diese PK mein ist? Sie können sehen, dass "ID-Spalte" [ist in den Dokumenten verwiesen] (http://grails.org/doc/latest/guide/GORM.html#databaseIndices). Um genauer zu sein: Ich ordne eine Datenbank ab, die bereits existiert, und kann die PK nicht auf die Grails-Vorgabe ändern lassen. –
@ SérgioMichels Er sagt, Sie haben einen Tippfehler, denke ich. – AHungerArtist
@AHungerArtist Oh ja, es gab tatsächlich einen Tippfehler, aber der Fehler immer noch :( –