Tengo un producto de objetos que pertenece a ciertas categorías, es decir, la relación clásica de muchos a uno.Hibernar, insertar o actualizar sin seleccionar
@Entity
public class Product{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
String name;
Double price;
@ManyToOne(fetch = FetchType.LAZY)
Category category;
...
}
@Entity
public class Category implements Identifiable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
...
}
Quiero insertar y actualizar productos sin preseleccionar categorías. De esta manera:
Product product = dao.get(productId);
Category category = dao.get(categoryId);
product.setCategory(category);
dao.update(product);
o
Product product = new Product(somename);
Category category = dao.get(categoryId);
product.setCategory(category);
dao.insert(product);
¿Es posible actualizar e insertar sin categoría de selección? No quiero usar HQL o consultas directas para eso.
El problema con este enfoque es que está creando una nueva instancia de entidad persistente con el mismo identificador. Puede haber funcionado para usted esta vez porque 'Category' en cuestión no estaba asociado con la sesión ** actual **; si lo fuera, Hibernate lanzaría una excepción. También es peligroso en términos de integridad de datos; si tuviera que especificar la cascada de su categoría de muchos a uno en 'category', el código anterior sobrescribiría su categoría original con todos los valores en blanco (o fallaría con un error de violación de restricciones) – ChssPly76
Hm, tenía la sensación de estarlo algo desagradable aquí. Gracias por la aclaración. – Vladimir