2010-07-16 27 views
11

Acabo de comenzar a leer JPA, y la implementación en hibernación para comprender los detalles. pero, para continuar con el desarrollo hasta entonces, ¿puedes ayudar a aclarar un qn básico?Cuándo usar, no usar, OneToOne y ManyToOne

  1. Cuándo utilizar OneToOne
    me permite usar OneToOne si el gestor de la entidad necesita para manejar la persistencia del objeto relacionado. el punto es que siempre puedo vivir sin especificar OneToOne, pero entonces la responsabilidad recae en mí para administrar la relación y asegurarme de que los objetos referidos no estén en estado transitorio. ¿Es esto cierto?

  2. Cuándo usar, o no usar, ManyToOne
    Supongamos que estoy definiendo una clase Employee, y necesito definir la rel con Employer. En este caso, ¿necesito para especificar ManyToOne como el de abajo, o lo que si no se

    @Entity 
        public class Employer { 
        String name; 
        } 
    
        @Entity 
        class Employee { 
         String name; 
         @ManytoOne //or not?? 
         Employer employer; 
         } 
    

gracias

Respuesta

6

1: Cuando se trabaja con relaciones de entidad, se debe utilizar siempre las anotaciones correspondientes (OneToOne, OneToMany, ManyToOne o ManyToMany). La elección que tiene es si desea asegurarse de que la entidad que está detrás de la relación no sea transitoria usted mismo o especifique la propiedad cascade en la anotación de OneToOne para que JPA se encargue de eso por usted. Esto le permite crear toda una gráfica de objetos y persistir en una llamada:

@OneToOne(cascade = CascadeType.ALL) 
private MyType myType; 

2: Sí, una relación empleador-empleado suena como una relación OneToMany, y la relación empleado-empleador habría ManyToOne . Si desea tener ambas direcciones, eso se llama una relación bidireccional. Eche un vistazo a relevant section in the Java EE tutorial para más detalles.

El JPA section in the Java EE tutorial es una buena referencia para comenzar.

3

Cuándo utilizar OneToOne Puedo usar OneToOne si el administrador de entidades necesita manejar la persistencia del objeto relacionado. el punto es que siempre puedo vivir sin especificar OneToOne, pero entonces la responsabilidad recae en mí para administrar la relación y asegurarme de que los objetos referidos no estén en estado transitorio. ¿Es esto cierto?

No necesita marcar la relación si no desea que el administrador de entidades maneje las operaciones. Puede tener la entidad relacionada como un campo transitorio y persistir la entidad relacionada manualmente. Pero en ese caso, no usaría toda la lista de características que proporciona JPA.

Al marcar las relaciones, EntityManager conoce la estructura de la base de datos. Y eso es esencial si desea utilizar el poder de JPA.

Eg: class Car 
     { 
     @OneToOne 
     Warehouse warehouse; 
     //other fields 
     } 

Aquí

  • que puede recuperar el objeto Almacén relacionados al recuperar un coche

  • puedo conservar un objeto de almacén, mientras que persiste un coche (con la opción de cascada según ha explicado el cartel debajo)

  • del mismo modo Actualizar, borrar ...

Aparte de estos, durante el uso de JPQL,

se puede recorrer a Almacén

como en

em.createQuery("select c.warehouse from Car c"); 

Estos no funcionaría a menos que marque la relación.

Cuestiones relacionadas