Pregunta

Debido a llamar a un flush () para obtener cada entidades persisten desde la memoria a la base de datos. Así que si uso demasiado llamada innecesaria al ras (), podría tomar mucho tiempo, por lo tanto no es una buena opción para el rendimiento. Aquí es un escenario que no sé cuándo llamar a un flush ()?

//Order and Item have Bidirectional Relationships
Order ord = New ord("my first order");
Item item = New Item("tv",10);

//...process item and ord object

em.persist(ord);//em is an instance of EntityManager
em.flush();// No.1 flush()

item.setOrder(ord);
em.persist(item);

Set<Item> items= new HashSet<Item>();
items.add(item);
ord.setItems(items);

em.flush();// No.2 flush()

Mi pregunta es:? Llamada del número 1 al ras podría evitar o no

Las cosas que me preocupaba es: con el fin de hacer el item.setOrder (ord) , necesitamos una base de datos de identificación de ord. Y llamando solamente em.persist (ord) no puede generar un identificador de base de datos, así que tengo que llamar a la em.flush () antes de item.setOrder (ORD) . Así que ¿cuál es su opinión chicos?

Gracias de antemano.

¿Fue útil?

Solución

i debería construir primero la estructura, y después de que persistir todo.

Order ord = New ord("my first order");
Item item = New Item("tv",10);

item.setOrder(ord);

Set<Item> items= new HashSet<Item>();
items.add(item);
ord.setItems(items);

em.persist(ord);

De este modo, se persiste todo el árbol en una llamada y esté al mismo nivel no es necesario.

En un buen diseño de objetos, se debe utilizar la forma descrita duffymo cablear sus objetos.

Otros consejos

Creo que debería estar haciendo todo esto en un contexto transaccional y se deja manejar estas cuestiones para usted.

Es necesario integrar la relación bidireccional en los objetos:

class Parent
{
    private List<Child> children;

    public boolean addChild(Child c)
    {
        c.setParent(this); // this is the key piece

        return this.children.add(c);
    }
}

class Child
{
   private Parent parent;

   public void setParent(Parent p)
   {
      this.parent = p;
   }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top