Query-uitzondering in Slaap-modus

Ik gebruik slaapstand. Ik gebruik de opgegeven query om informatie van db op te halen

Query q = session.createQuery("select m.menuId,m.menuType,it.itemId,it.name,it.price,it.currency," +
        "ingr.ingredientId,ingr.ingredient from Menu as m, MenuItem as it," +
        "KeyIngredient as ingr where m.menuId  in "+
        "(select MenuId from MenuItem as itm innerjoin KeyIngredient as ing "+ 
        "where itm.itemId = ing.MenuItemId) and m.RestaurantId=" +restaurantId);

wanneer ik deze vraag in werking stel krijg ik deze fout

    could not resolve property: menuId of: com.hibernate.model.Menu [select m.menuId,m.menuType,it.itemId,it.name,it.price,it.currency,ingr.ingredientId,ingr.ingredient 
from com.hibernate.model.Menu as m, com.hibernate.model.MenuItem as it,com.hibernate.model.KeyIngredient as ingr where m.menuId  in (select MenuId from 
com.hibernate.model.MenuItem as itm innerjoin KeyIngredient as ing where itm.itemId = 
ing.MenuItemId) and m.RestaurantId=1]

Dit is het bestand menu.hbm.xml


        
            
                
                    
                
                
                    
                
                
                    
                
            
        
    

Menuklasse

public class Menu implements java.io.Serializable {

    private MenuId id;

    public Menu() {
    }

    public Menu(MenuId id) {
        this.id = id;
    }

    public MenuId getId() {
        return this.id;
    }

    public void setId(MenuId id) {
        this.id = id;
    }

}

MenuId Class

public class MenuId implements java.io.Serializable {

    private int menuId;
    private long restaurantId;
    private String menuType;

    public MenuId() {
    }

    public MenuId(int menuId, long restaurantId, String menuType) {
        this.menuId = menuId;
        this.restaurantId = restaurantId;
        this.menuType = menuType;
    }

    public int getMenuId() {
        return this.menuId;
    }

    public void setMenuId(int menuId) {
        this.menuId = menuId;
    }

    public long getRestaurantId() {
        return this.restaurantId;
    }

    public void setRestaurantId(long restaurantId) {
        this.restaurantId = restaurantId;
    }

    public String getMenuType() {
        return this.menuType;
    }

    public void setMenuType(String menuType) {
        this.menuType = menuType;
    }

    public boolean equals(Object other) {
        if ((this == other))
            return true;
        if ((other == null))
            return false;
        if (!(other instanceof MenuId))
            return false;
        MenuId castOther = (MenuId) other;

        return (this.getMenuId() == castOther.getMenuId())
                && (this.getRestaurantId() == castOther.getRestaurantId())
                && ((this.getMenuType() == castOther.getMenuType()) || (this
                        .getMenuType() != null
                        && castOther.getMenuType() != null && this
                        .getMenuType().equals(castOther.getMenuType())));
    }

    public int hashCode() {
        int result = 17;

        result = 37 * result + this.getMenuId();
        result = 37 * result + (int) this.getRestaurantId();
        result = 37 * result
                + (getMenuType() == null ? 0 : this.getMenuType().hashCode());
        return result;
    }

}

en dit is mijn invoer in het cfg-bestand


Hoe kan ik dit op de juiste manier doen? Bedankt

1
Gepost de klassen. Kun je iets bedenken?
toegevoegd de auteur Zach, de bron
Kun je ook je entiteitklasse, Menu, posten? Het lijkt erop dat u de database-ID gebruikt in plaats van de eigenschapnaam.
toegevoegd de auteur CodeSlinger, de bron

2 antwoord

Niet-opgeloste eigenschappen zijn alleen dat: java-eigenschappen die overwinteren, zien geen getters/setters.

In de slaapstand moeten uw HQL-termen verwijzen naar de eigenschap in de ".cfg" -bestanden --- in de kolomnamen van de gegevens.

Hoogstwaarschijnlijk was het de bedoeling om naar "menuId" te zoeken, aangezien java-bonen niet worden aangeduid met underscores in hun getter/Setters.

1
toegevoegd
Het probleem SQL versus HQL wordt ook beschreven in het andere antwoord ....
toegevoegd de auteur jayunit100, de bron
Ik heb de vraag bewerkt om meer informatie toe te voegen. Zou je even willen kijken. Ook heb ik de op futen gebaseerde getters en setters veranderd
toegevoegd de auteur Zach, de bron

Die query lijkt op SQL in plaats van HQL. Als dat het geval is, gebruikt u in plaats daarvan session.createSQLQuery() :

Query q = session.createSQLQuery("your SQL here");

Als ik ongelijk heb en het is bedoeld om HQL te zijn, moet u uw toewijzingen plaatsen - het is menu_id dat als een property is toegewezen?

1
toegevoegd
Ik heb meer info toegevoegd aan de vraag. Kun je alsjeblieft een kijkje nemen. menu_id was niet eerder in kaart gebracht, maar nu heb ik het veranderd, maar ik heb nog steeds een foutmelding.
toegevoegd de auteur Zach, de bron
Oké, ik krijg nu waar ik fout ging. Ik ben nieuw om te overwinteren. Uw antwoord createSQLQuery werkt goed voor mij. Bedankt. Ik wilde weten hoe ik met de mapping-bestanden moest werken. Daarom heb ik meer info toegevoegd. Hartelijk bedankt.
toegevoegd de auteur Zach, de bron
@Zach uw zoekopdracht heeft niet veel zin, om eerlijk te zijn - vooral de geneste subquery. Dat terzijde, aangezien menuId onderdeel is van composiet-id, moet je het als zodanig aanduiden: m.id.menuId in plaats van m.menuId . Hetzelfde geldt voor menutype
toegevoegd de auteur ChssPly76, de bron