You are on page 1of 3

@Entity class Address { } ... @Entity class Customer { @ManyToOne(cascade=CascadeType.ALL) Address billingAddress; @ManyToOne(cascade=CascadeType.ALL) Address shippingAddress; } ...

@Entity class Order { @ManyToOne(cascade=CascadeType.ALL) Customer customer; @OneToMany(cascade=CascadeType.ALL) List<OrderDetail> details; public Customer getCustomer() { return customer; } public void setCustomer(Customer customer) { this.customer = customer; } public List<OrderDetail> getDetails() { return details; } public void setDetails(List<OrderDetail> details) { this.details = details; } ... } ... @Entity class OrderDetail {

... @ManyToOne Order order; public Order getOrder() { return order; } public void setOrder(Order order) { this.order = order; } } Guardar en cascada Guardar en cascada es un proceso recursivo que podra ser descrito como "caminar el grfico de objetos". El algoritmo general para guardar es: Antes de guardar un bean guardamos sus asociaciones ManyToOne (y OneToOnes apropiados) Luego guardamos el propio bean Luego guardamos cualquier OneToMany, ManyToMany (Y OneToOnes apropiados)

Nota: OneToOnes ocurrirn antes y despus de guardar el bean en funcin de si el OneToOne es propietaria de la clave fornea o no. Si eso no tiene sentido, no te preocupes demasiado. Ejemplo: Order order = .... //assume: //the order has a customer //the customer has a billing and shipping address //the order has details Ebean.save(order); Ebean.save (order) Antes de guardar el "order" guardamos el customer ...esto nos lleva al Customer Antes de guardar el "Customer" guardamos el billingAddress SAVE BillingAddress ...BillingAddress no tiene OneToMan... Antes de guardar el "customer" guardamos el shippingAddress SAVE shippingAddress ...shippingAddress no tiene OneToMany..

SAVE customer
customer tiene etc no tiene OneToMany...

SAVE order SAVE details de order

Una forma "relacional" de describir esto es que primero guardamos "las claves forneas importadas", luego guardamos el bean, y por ltimo guardamos "las claves forneas exportadas". Tal vez otra forma de pensar acerca de esto es tomar el ejemplo en el que cada objeto es nuevo y tendr que ser insertado. Antes de guardar la orden: necesitamos el customer_id as que tenemos que guardar al customer en primer lugar. Pero antes de gurdar al customer necesitamos el billing_address_id por lo que necesitamos guardar billingAddress primero, etc. En el otro extremo, tenemos que guardar order para obtener el order_id antes de que guardemos los details de de la order.

Eliminar en Cascada

La eliminacin en cascada el orden se invierte con respecto al guardar en cascada. Antes de eliminar un bean borramos su OneToMany, asociaciones ManyToMany (Y OneToOnes apropiados) Borramos propio bean Luego eliminamos cualquier ManyToOne (Y OneToOnes apropiados)

You might also like