Dentro creo la clase
Orden
Siguiendo algunas recomendaciones de mi compañero y aprendiz joshua bloch
Utilizo lo mas que pueda la palabra reservada final así me evito problemas de que algún despistado por error vuelva a re instanciar la clase y haga que explote todo
También evito crear relaciones de tipo gallina huevo por evitar problemas de loops infinitos como por ejemplo seria difícil crear el método tostring si la clase detalle de orden tenga una relación a orden además evito lo más posible utilizar el punto más de 2 veces por qué hace el código difícil de testear y crear clases mal diseñadas que hacen cosas que no le incumben evito poner cosas como
orden().getDetalle().getPlato().getPrecio
package com.tiaveneno.ventas.compartido.modelo;
Código
import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Temporal; import javax.persistence.TemporalType; public class Orden { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private short numero; @ManyToOne(cascade = CascadeType.ALL) private Personal cajero; @ManyToOne(cascade = CascadeType.ALL) private Personal mozo; @Temporal(TemporalType.DATE) @OneToMany(cascade = CascadeType.ALL) private final List<DetalleOrden> detalles = new ArrayList<DetalleOrden>(); public Orden(int id, short numero, Personal cajero, Personal mozo, this.id = id; this.numero = numero; this.cajero = cajero; this.mozo = mozo; this.fecha = fecha; } public Orden() { } public static Orden nueva() { return new Orden(); } public Orden detalles(DetalleOrden... detalleOrdens) { for (DetalleOrden detalleOrden : detalleOrdens) { this.con(detalleOrden); } return this; } public Orden con(DetalleOrden detalleOrden) { detalles.add(detalleOrden); return this; } public double obtenerTotal() { double total = 0; for (DetalleOrden detalleOrden : detalles) { total = total + detalleOrden.subtotal(); } return total; } //orrible codigo boilepart inebitable getter y setters public List<DetalleOrden> getDetalles() { return detalles; } @Override return "Orden [id=" + id + ", numero=" + numero + ", cajero=" + cajero + ", mozo=" + mozo + ", fecha=" + fecha + ", detalles=" + detalles + "]"; } }