2012-04-10 8 views
0

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.

Antwort

0

Gut sein, änderte ich die Abfrage:

Employee.createCriteria().list() { 
    projections { 
    userEmployees { 
     eq('user', someUser) 
    } 
    } 
} 
2

Sie verwenden "id cloumn:" in Mitarbeiter und Benutzer. Muss „Spalte“

+0

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. –

+2

@ SérgioMichels Er sagt, Sie haben einen Tippfehler, denke ich. – AHungerArtist

+0

@AHungerArtist Oh ja, es gab tatsächlich einen Tippfehler, aber der Fehler immer noch :( –