Criteri di ibernazione — alias
-
23-09-2019 - |
Domanda
Ho un po' di difficoltà con il concetto di alias in Hibernate.
La mia situazione è la seguente:
Ordine
@OneToMany(cascade=CascadeType.ALL,mappedBy="m_order")
private Set<OrderDetail> m_details;
Dettagli ordine
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="product_id")
private Product m_product;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="order_id")
private Order m_order;
DAO
c.createAlias("m_details", "detail").createCriteria("detail.m_product").add(Expression.idEq(productId));
Quindi voglio cercare ogni ordine che contiene un prodotto.
Tuttavia, con questa query continua a restituire 0 ordini e non vedo davvero cosa sto facendo di sbagliato.
Grazie!
Soluzione
la query mi sembra ok...Prova a impostare "hibernate.show_sql" su "true" in modo da poter effettivamente vedere SQL nel sistema.out o/e registrare i log4j.logger.org.hibernate.sql = debug, sql_appender
@lars sì, puoi. Criteri API - AssociazioniAlias è solo un breve nome di un nome completo/percorso Carriteria.createAlias ("car_parts.wheels", "Wheels")
Altri suggerimenti
Non sono sicuro che puoi usare l'alias per cose che non sono una colonna, cioè non ha il @Column
o @JoinColumn
-annotazione.
Sembra corretto.
Nella tua sezione DAO, hai già una variabile denominata "C" - puoi pubblicare il codice in cui questo è inizializzato? Questo è solo per ricontrollare che stai creando i criteri originali con l'ordine.
Quindi la cosa successiva da verificare se puoi ritirare il prodotto con quell'ID con quanto segue:
Product p = (Product)session.load(Product.class, productId)
In questo modo stai verificando che l'ID è corretto e in letargo può trovare quel prodotto.
In caso contrario, dovremmo iniziare a guardare il SQL generato come hanno suggerito gli altri commentatori.