Possiedo un oggetto prodotti appartenente a determinate categorie, vale a dire una relazione classica da molti a uno.Sospensione, inserimento o aggiornamento senza selezionare
@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;
...
}
Voglio inserire e aggiornare prodotti senza preselezionare le categorie. Come questo:
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);
E 'possibile aggiornare e inserire senza categoria selezionare? Non voglio usare HQL o query dirette per questo.
Il problema con questo approccio è che stai creando una nuova istanza di entità persistente con lo stesso identificatore. Potrebbe aver funzionato per te questa volta perché la categoria "in questione" non era associata alla ** sessione ** corrente; se lo fosse, Hibernate avrebbe lanciato un'eccezione. È anche pericoloso in termini di integrità dei dati; se dovessi specificare la cascata per il tuo molti-su-su 'category', il codice sopra sovrascriverebbe la tua categoria originale con tutti i valori vuoti (o fallirebbe con l'errore di violazione dei vincoli) – ChssPly76
Hm, avevo la sensazione che io stia facendo qualcosa di brutto qui. Grazie per il chiarimento. – Vladimir