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!

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top