根据外键值选择结果

时间:2016-02-17 17:44:55

标签: java spring hibernate jpa jpql

表'actels'有四个字段 id_actels,name_actel,num_actel和region_id_region,它们是'region'表的外键。

我希望获得具有特定region_id_region值的所有Actels。像这样:

p = re.compile(ur'\bFile=(.+?\.ini)\s+(Cmd:.*)')
print re.findall(p, input_str)

详细说明:

我得到的错误是:

Select DISTINCT * from Actels where region_id_region = 51 ORDER BY id_actels ASC;

ActelService.java:

on in thread "main" java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: region_id_region of: com.springJPA.domain.Actels [Select DISTINCT e from com.springJPA.domain.Actels e where e.region_id_region = ?1 ORDER BY e.id_actels ASC]
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1364)
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1300)
        at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:309)
        at com.springJPA.service.ActelsService.listeActelParID_REGION(ActelsService.java:69)
        at com.springJPA.service.ActelsService$$FastClassByCGLIB$$9125bf15.invoke(<generated>)
        at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
        at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:692)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
        at org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:42)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:50)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:625)
        at com.springJPA.service.ActelsService$$EnhancerByCGLIB$$7de8d622.listeActelParID_REGION(<generated>)
        at com.springJPA.service.FonctionDAO.afficherLISTE_ACTEL_PAR_REGION(FonctionDAO.java:913)
        at com.springJPA.test.Main.main(Main.java:39)
    Caused by: org.hibernate.QueryException: could not resolve property: region_id_region of: com.springJPA.domain.Actels [Select DISTINCT e from com.springJPA.domain.Actels e where e.region_id_region = ?1 ORDER BY e.id_actels ASC]
        at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:83)
        at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:77)
        at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1920)
        at org.hibernate.hql.internal.ast.tree.FromElementType.getPropertyType(FromElementType.java:313)
        at org.hibernate.hql.internal.ast.tree.FromElement.getPropertyType(FromElement.java:494)
        at org.hibernate.hql.internal.ast.tree.DotNode.getDataType(DotNode.java:598)
        at org.hibernate.hql.internal.ast.tree.DotNode.prepareLhs(DotNode.java:266)
        at org.hibernate.hql.internal.ast.tree.DotNode.resolve(DotNode.java:213)
        at org.hibernate.hql.internal.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:118)
        at org.hibernate.hql.internal.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:114)
        at org.hibernate.hql.internal.ast.HqlSqlWalker.resolve(HqlSqlWalker.java:881)
        at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1264)
        at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4297)
        at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3769)
        at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1947)
        at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:794)
        at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:595)
        at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:299)
        at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:247)
        at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:248)
        at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183)
        at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
        at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105)
        at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
        at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168)
        at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:219)
        at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:197)
        at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1732)
        at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:301)
        ... 15 more

Actels.java:

package com.springJPA.service;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

import com.springJPA.domain.Actels;
import com.springJPA.util.MyEntityManagerFactory;

@Component("actelService")
public class ActelsService {
    @Autowired @Qualifier("myEMF")
    private MyEntityManagerFactory emf;
    private EntityManager entityManager;

    /**
     * ajoutActel
     * @param actel
     */
    public void ajoutActel(Actels actel) {
        entityManager = emf.getEntityManager();
        entityManager.persist(actel);
    }

    /**
     * modifActel
     * @param actel
     */
    public void modifActel(Actels actel) {
        entityManager = emf.getEntityManager();
        entityManager.merge(actel);

    }

    /**
     * supprimerActel
     * @param actel
     */
    public void supprimerActel(Actels actel) {
        entityManager = emf.getEntityManager();
        entityManager.remove(actel);

    }

    /**
     * listeActel
     * @return listeActel
     */
    public List<Actels> listeActel() {
        entityManager = emf.getEntityManager();
        TypedQuery<Actels> query = entityManager.createQuery("Select DISTINCT e from Actels e ORDER BY e.id_actels ASC", Actels.class);
        List<Actels> results = query.getResultList();
        return results;

    }

    /**
     * listeActel
     * @param id_region
     * @return
     */
    public List<Actels> listeActelParID_REGION(int id_region) {
        entityManager = emf.getEntityManager();
        TypedQuery<Actels> query = entityManager.createQuery("Select DISTINCT e from Actels e where e.region_id_region = ?1 ORDER BY e.id_actels ASC", Actels.class);
        query.setParameter("1", id_region);
        List<Actels> results = query.getResultList();
        return results;

    }

    public EntityManager getEntityManager() {
        return entityManager;
    }

    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    public MyEntityManagerFactory getEmf() {
        return emf;
    }

    public void setEmf(MyEntityManagerFactory emf) {
        this.emf = emf;
    }
}

Region.java:

package com.springJPA.domain;

import java.io.Serializable;
import java.util.Collection;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;

/**
 * Entity implementation class for Entity: Actels
 *
 */
@Entity

public class Actels implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "id_Sequence_actels")
    @SequenceGenerator(name = "id_Sequence_actels", sequenceName = "ID_SEQ_ACTELS")
    private int id_actels;
    private String nom_actel;
    private int num_actel;

    private static final long serialVersionUID = 1L;
    @OneToMany
    @JoinColumn(name = "Actels_id_actels", referencedColumnName = "id_actels")
    private Collection<Ville> ville;
    public Actels() {
        super();
    }   

    public int getId_actels() {
        return id_actels;
    }
    public void setId_actels(int id_actels) {
        this.id_actels = id_actels;
    }

    public String getNomActels() {
        return this.nom_actel;
    }

    public void setNomActels(String nomActels) {
        this.nom_actel = nomActels;
    }

    public int getNum_actel() {
        return num_actel;
    }

    public void setNum_actel(int num_actel) {
        this.num_actel = num_actel;
    }

    public Collection<Ville> getVille() {
        return ville;
    }

    public void setVille(Collection<Ville> param) {
        this.ville = param;
    }


}

2 个答案:

答案 0 :(得分:1)

您的实体(region_id_region类)中没有Actels属性。你应该有这样的东西:

@Entity
public class Actels {
 ...
private int region_id_region;
 ...
 }

答案 1 :(得分:0)

试试这个

InnerException
相关问题