Question

J'ai un peu de mal avec le concept d'alias dans Hibernate.
Ma situation est la suivante :
Commande

@OneToMany(cascade=CascadeType.ALL,mappedBy="m_order")
private Set<OrderDetail> m_details; 

Détails de la commande

    @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));

Je souhaite donc rechercher chaque commande contenant un produit.
Cependant, avec cette requête, elle continue de renvoyer 0 commande et je ne vois pas vraiment ce que je fais de mal.
Merci!

Était-ce utile?

La solution

la requête me semble correcte...essayez de définir « hibernate.show_sql » à « true » afin que vous puissiez réellement voir le SQL dans le System.out ou/et l’enregistrer log4j.logger.org.hibernate.SQL=DEBUG, SQL_APPENDER

@lars oui, tu peux. API de critères - Associations alias n’est qu’un nom abrégé d’un nom complet/chemin carCriteria.createAlias(« car_parts.wheels », « roues »)

Autres conseils

Je ne suis pas sûr que vous pouvez utiliser alias pour des choses qui ne sont pas une colonne, à savoir ne pas le @Column ou @JoinColumn-annotation.

Cela semble correct.

Dans votre section DAO, vous avez déjà une variable nommée « c » - vous pouvez afficher le code où cela est initialisé? C'est juste à vérifier que vous créez les critères originaux avec le Order.class.

Alors la prochaine chose à vérifier si vous pouvez retreive le produit avec cet identifiant ce qui suit:

Product p = (Product)session.load(Product.class, productId)

De cette façon, vous vérifiez que l'identifiant est correct et Hibernate pouvez trouver ce produit.

A défaut, nous devrions commencer à examiner le SQL généré comme les autres commentateurs ont suggéré.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top