2012-07-20 9 views
8

yo tratamos de definir una relación de un solo en 2 de manera diferente:
Grails 2.0.3Griales un solo a un solo relación

Caso 1:

class Car { 
    String model 
    Engine eng 
    static constraints = { 
     eng unique: true 
    } 
} 

class Engine { 
    Double capacity 
    static belongsTo = [car : Car] 
} 

Caso 2:

class Car { 
    String model 
    static hasOne = [eng : Engine] 
    static constraints = { 
     eng unique: true 
    } 
} 


class Engine { 
    Double capacity 
    static belongsTo = [car : Car] 
} 

tiene un aspecto similar, y ambos proporcionan mapeo bidireccional uno a uno. Lamentablemente, DB tiene una estructura diferente en ambos casos.

Caso 1: enter image description here

Caso 2: enter image description here

Por qué una vez coche y una vez motor mantiene enlace a segunda tabla.

¿Dónde está mi problema? Cuando miro el código, desde la perspectiva DDD, ambos casos sugieren que la clase Auto es más importante y Car agrega Engine. Lamentablemente, cuando miro desde el lado de DB en el caso 2, preferiría decir que está en el lado opuesto: Motor agregado. Por supuesto que puedo usar el primer enfoque, pero la mayor parte de la publicación que vi sobre los griales, presenta una segunda vía para definir la relación. ¿Tal vez malentendí algo y uso hasOne de manera incorrecta?

Respuesta

13

Los estados que el uso de documentation on hasOne esto crea una relación bi-direccional uno-a-uno donde la clave foránea está en el niño.

El belongsTo significa que las acciones realizadas en el elemento primario (por ejemplo, guardar y actualizar) se transferirán en hibernación al hijo.

Si desea que la clave externa esté en Engine, utilice static hasOne = [engine:Engine] en Car.

Si desea que la clave externa esté en Car, utilice Engine engine en Car.

En ambos casos se utiliza belongsTo = [car: Car] en Engine

-1

Creo que deberías tratar de hacer este enfoque.

class Car { 
     String model 
     Engine engine 
     static constraints = { 
      eng unique: true 
     } 
    } 


    class Engine { 
     Double capacity 
     Car car 
    } 

Creo que lo hará. Puede leerlo aquí:

De forma predeterminada, la asociación de direcciones se correlacionaría con una columna de clave externa llamada dirección_id.

http://grails.org/doc/latest/guide/GORM.html

en las asignaciones de


Many-to-One/One-to-One espero que ayude :)

+0

No estoy seguro, pero, es que esto es camino correcto para mapear .... porque Motor El motor se asemeja a muchos-a-uno, y luego poner la restricción a la única ...¿Tiene algún sentido? Puedes ir con HasOne a su ... –

Cuestiones relacionadas