Jpa 查询中的参数名称[idAktora]';的选择条件与查询中定义的任何参数名称都不匹配

Jpa 查询中的参数名称[idAktora]';的选择条件与查询中定义的任何参数名称都不匹配,jpa,many-to-many,Jpa,Many To Many,我在演员(Aktorzy)和电影(Filmy)之间创造了@ManyToMany关系。在我的一个函数中,当我从电影中调用findAll()时,我在Glassfish控制台中得到: Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-6094] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence

我在演员(Aktorzy)和电影(Filmy)之间创造了@ManyToMany关系。在我的一个函数中,当我从电影中调用findAll()时,我在Glassfish控制台中得到:

Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-6094] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.QueryException
Exception Description: The parameter name [idAktora] in the query's selection criteria does not match any parameter name defined in the query.
Query: ReadAllQuery(name="aktorzy" referenceClass=Aktorzy sql="SELECT t1.IDAKTORA, t1.IMIE_AKTORA, t1.NAZWISKO_AKTORA FROM aktorzy_filmy t0, AKTORZY t1 WHERE ((t0.idAktora = ?) AND ((t0.idFilmu = ?) AND (t1.IDAKTORA = t0.idAktorzyFilmy)))")
    at org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:480)
我认为日志的第二个重要部分:

 Caused by: Exception [EclipseLink-6094] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.QueryException
Exception Description: The parameter name [idAktora] in the query's selection criteria does not match any parameter name defined in the query.
我认为问题在于,查询试图从actors_films(aktorzy_filmy)表中获取所有演员信息,但这只是创建多个关系的附加表,它应该从actors(aktorzy)中获取,但我不知道如何更改

这是我的密码:

阿克托托(部分):

private static final long serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私有整数idAktora;
私人字符串imie_aktora;
私有字符串nazwisko_aktora;
@许多(mappedBy=“aktorzy”)
私人名单;
电影(部分):

@ManyToMany(fetch=FetchType.EAGER)
@可接合(
name=“aktorzy_filmy”,
连接柱={
@JoinColumn(name=“idFilmu”,referencedColumnName=“idFilmu”),
@JoinColumn(name=“idAktora”,referencedColumnName=“idAktora”)
},
inverseJoinColumns=@JoinColumn(name=“IDAKTORZYFIMMY”)
)
私人名单aktorzy;
公共列表getAktorzy(){
返回阿克托齐;
}
公共无效添加器(Aktorzy-aktor){
this.aktorzy.add(aktor);
aktor.getFilmy().add(这个);
}
在客户端应用程序中出现问题的位置:

case 12: {
                System.err.println("Uzupenij obsade filmu");
                System.out.println(filmFacade.findAll());

                System.out.println("Podaj id filmu ktoremu chcesz nadac obsade");
                int idFilmu = odczyt.nextInt();
                Film film  = filmFacade. find(idFilmu); 
                System.out.println("Dodajesz obsade do filmu "+ filmFacade.find(idFilmu).toString());
                boolean czyMaDodacKolejnegoAktora = true;
                List<Integer> dostepni=new ArrayList<Integer>();
                while(czyMaDodacKolejnegoAktora){
                    dostepni.clear();
                    for(Aktorzy a: aktorzyFacade.findAll()){
                        if(!film.getAktorzy().contains(a)){
                            System.out.println(a.toString());
                            dostepni.add(a.getId());
                        }                            
                    }
                    System.out.println("Wybierz id aktora ktorego chcesz przypisac do filmu");
                    System.err.println("0 konczy akcje");
                   int wyborAktora = odczyt.nextInt();
                   if(wyborAktora == 0){
                       czyMaDodacKolejnegoAktora = false;
                   }

                   if(dostepni.contains(wyborAktora)){
                        film.addAktor(aktorzyFacade.find(wyborAktora));
                        filmFacade.edit(film);
                   }else{
                       System.err.println("Nie możesz dodać aktora");
                   }




                }

                break;
            }
案例12:{
系统错误打印(“Uzupenij obsade filmu”);
System.out.println(filmFacade.findAll());
System.out.println(“Podaj id filmu ktoremu chcesz nadac obsade”);
int idFilmu=odczyt.nextInt();
Film-Film=filmFacade.find(idFilmu);
System.out.println(“Dodajesz obsade do filmu”+filmFacade.find(idFilmu.toString());
布尔Czymadackolejnegoaktora=true;
List dostepni=new ArrayList();
while(czyMaDodacKolejnegoAktora){
dostepni.clear();
for(Aktorzy a:aktorzyFacade.findAll()){
如果(!film.getAktorzy()包含(a)){
System.out.println(a.toString());
dostepni.add(a.getId());
}                            
}
System.out.println(“Wybierz id aktora ktorego chcesz przypisac do filmu”);
系统错误println(“0 konczy-akcje”);
int wybaraktora=odczyt.nextInt();
如果(wyborAktora==0){
Czymadackolejnegoaktora=假;
}
if(多替普尼含(wyborAktora)){
addAktor(aktorzyacade.find(wybaraktora));
编辑(电影);
}否则{
系统错误打印(“Nie możesz dodaćaktora”);
}
}
打破
}
抽象面:

public abstract class AbstractFacade<T> {
private Class<T> entityClass;

public AbstractFacade(Class<T> entityClass) {
    this.entityClass = entityClass;
}

protected abstract EntityManager getEntityManager();

public void create(T entity) {
    getEntityManager().persist(entity);
}

public void edit(T entity) {
    getEntityManager().merge(entity);
}

public void remove(T entity) {
    getEntityManager().remove(getEntityManager().merge(entity));
}

public T find(Object id) {
    return getEntityManager().find(entityClass, id);
}

public List<T> findAll() {
    javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
    cq.select(cq.from(entityClass));
    return getEntityManager().createQuery(cq).getResultList();
}

public List<T> findRange(int[] range) {
    javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
    cq.select(cq.from(entityClass));
    javax.persistence.Query q = getEntityManager().createQuery(cq);
    q.setMaxResults(range[1] - range[0] + 1);
    q.setFirstResult(range[0]);
    return q.getResultList();
}

public int count() {
    javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
    javax.persistence.criteria.Root<T> rt = cq.from(entityClass);
    cq.select(getEntityManager().getCriteriaBuilder().count(rt));
    javax.persistence.Query q = getEntityManager().createQuery(cq);
    return ((Long) q.getSingleResult()).intValue();
}
公共抽象类AbstractFacade{
私有类实体类;
公共抽象外观(类entityClass){
this.entityClass=entityClass;
}
受保护的抽象EntityManager getEntityManager();
公共无效创建(T实体){
getEntityManager().persist(实体);
}
公共无效编辑(T实体){
getEntityManager().merge(实体);
}
公共无效删除(T实体){
getEntityManager().remove(getEntityManager().merge(entity));
}
公共找不到(对象id){
返回getEntityManager().find(entityClass,id);
}
公共列表findAll(){
javax.persistence.CriteriaQuery cq=getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
返回getEntityManager().createQuery(cq.getResultList();
}
公共列表findRange(int[]范围){
javax.persistence.CriteriaQuery cq=getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
javax.persistence.Query q=getEntityManager().createQuery(cq);
q、 setMaxResults(范围[1]-范围[0]+1);
q、 setFirstResult(范围[0]);
返回q.getResultList();
}
公共整数计数(){
javax.persistence.CriteriaQuery cq=getEntityManager().getCriteriaBuilder().createQuery();
javax.persistence.criteria.Root rt=cq.from(entityClass);
选择(getEntityManager().getCriteriaBuilder().count(rt));
javax.persistence.Query q=getEntityManager().createQuery(cq);
返回((长)q.getSingleResult()).intValue();
}
}

和阿克托尔兹

   @Stateless
public class AktorzyFacade extends AbstractFacade<Aktorzy> implements app.dao.AktorzyFacadeRemote {
    @PersistenceContext(unitName = "PPProjekt-ejbPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public AktorzyFacade() {
        super(Aktorzy.class);
    }

}
@无状态
公共类AktorzyFacade扩展AbstractFacade实现app.dao.AktorzyFacaderMeme{
@PersistenceContext(unitName=“PPProjekt ejbPU”)
私人实体管理者;
@凌驾
受保护的EntityManager getEntityManager(){
返回em;
}
公共AktorzyFacade(){
超级(Aktorzy.class);
}
}

所以你有一个叫做findAll的东西,但不发布它的内容/JPQLi在neatbeans上工作,我选择了为实体类创建会话bean,它在我的bean ofc中生成DAO,我会在一分钟后发布。显然在你的查询中你不尊重camelCase。。。试着用正确的字段名重写查询语句(注意大小写)
public abstract class AbstractFacade<T> {
private Class<T> entityClass;

public AbstractFacade(Class<T> entityClass) {
    this.entityClass = entityClass;
}

protected abstract EntityManager getEntityManager();

public void create(T entity) {
    getEntityManager().persist(entity);
}

public void edit(T entity) {
    getEntityManager().merge(entity);
}

public void remove(T entity) {
    getEntityManager().remove(getEntityManager().merge(entity));
}

public T find(Object id) {
    return getEntityManager().find(entityClass, id);
}

public List<T> findAll() {
    javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
    cq.select(cq.from(entityClass));
    return getEntityManager().createQuery(cq).getResultList();
}

public List<T> findRange(int[] range) {
    javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
    cq.select(cq.from(entityClass));
    javax.persistence.Query q = getEntityManager().createQuery(cq);
    q.setMaxResults(range[1] - range[0] + 1);
    q.setFirstResult(range[0]);
    return q.getResultList();
}

public int count() {
    javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
    javax.persistence.criteria.Root<T> rt = cq.from(entityClass);
    cq.select(getEntityManager().getCriteriaBuilder().count(rt));
    javax.persistence.Query q = getEntityManager().createQuery(cq);
    return ((Long) q.getSingleResult()).intValue();
}
   @Stateless
public class AktorzyFacade extends AbstractFacade<Aktorzy> implements app.dao.AktorzyFacadeRemote {
    @PersistenceContext(unitName = "PPProjekt-ejbPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public AktorzyFacade() {
        super(Aktorzy.class);
    }

}