Hibernate critères — alias
Je suis un peu en difficulté avec le concept de l'alias dans Hibernate.
Ma situation est la suivante:
Ordre
@OneToMany(cascade=CascadeType.ALL,mappedBy="m_order")
private Set<OrderDetail> m_details;
OrderDetail
@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));
Donc je recherche toute commande contenant un produit.
Cependant, avec cette requête, il conserve son retour 0 commandes et je ne vois vraiment pas ce que je fais mal.
Merci!
- Activer la journalisation SQL (dans hibernate.définir les propriétés de
hibernate.show_sql=true
) et de regarder des requêtes générées. Ensuite les montrer à nous.
Vous devez vous connecter pour publier un commentaire.
la requête semble ok pour moi...
essayez de mettre la "mise en veille prolongée.show_sql" à "true" si vous pouvez réellement voir le SQL dans le Système.hors
ou/et de les enregistrer dans un fichier log4j.enregistreur.org.mise en veille prolongée.SQL=DEBUG, SQL_APPENDER
@lars oui, vous pouvez. API criteria - Associations
alias est juste un nom court d'un nom complet/chemin
carCriteria.createAlias("car_parts.les roues", "roues")
Je ne suis pas sûr que vous pouvez utiliser des alias pour des choses qui n'est pas une colonne, c'est à dire ne pas avoir la
@Column
ou@JoinColumn
-annotation.Qui semble correct.
Dans votre DAO section, vous avez déjà une variable nommée " c " - pouvez-vous poster le code, lorsque cela est initialisé? C'est juste pour vérifier que vous êtes en train de créer les critères d'origine avec le Order.class.
Puis la prochaine chose à vérifier si vous pouvez récupérer le produit avec cet id avec les éléments suivants:
Product p = (Product)session.load(Product.class, productId)
De cette façon, vous êtes vérifier que le code est correct et Hibernate peut trouver ce produit.
Défaut que nous devrions commencer à regarder le SQL généré comme d'autres commentateurs l'ont suggéré.