2016-10-23 11 views
0

Eclipse、Jsf、Hibernate、WildFly、Primefacesでアプリケーションを設計しています。ManyToMany org.hibernate.hql.internal.ast.QuerySyntaxException "マッピングされていません"

私は「マップされていない」休止状態の問題を抱えています。はい、私たちはテーブル名のEntity名を使用するべきです。 私はここに新しく、どのように物事を適切に行うかわからない。

自動作成されたテーブルはaluno_turmaですが、このテーブルでは何もできませんでした。

「マップされていません」に関するすべての質問をすべて調べてみましたが、動作させることはできませんでした。

ありがとうございました。

コードは以下の通りである:

Aluno.java

@Entity 
@ManagedBean 
@Table(name = "Aluno") 
public class Aluno implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private Integer id; 
... 
    @ManyToMany 
    @JoinTable(name="aluno_turma", 
      joinColumns={   @JoinColumn(name="aluno_id")}, 
      inverseJoinColumns={ @JoinColumn(name="turma_id")}) 
    private List<Turma> turmas = new ArrayList<Turma>(); 

... 
    public Integer getId() { 
     return id; 
    } 
    public void setId(Integer id) { 
     this.id = id; 
    } 

Turma.java

@Entity 
    @ManagedBean 
    public class Turma implements Serializable{ 

     /** 
     * 
     */ 
     private static final long serialVersionUID = 1L; 
     @Id 
     @GeneratedValue(strategy=GenerationType.IDENTITY) 
     private Integer id; 
     private String nome; 
     private Integer diaSemana; 
     private String hora; 
     private String observacao; 
     private Boolean inativo; 

     @ManyToOne 
     private Modalidade modalidade; 

     @ManyToMany 
     @JoinTable(name="aluno_turma", 
       joinColumns={   @JoinColumn(name="turma_id")}, 
       inverseJoinColumns={ @JoinColumn(name="aluno_id")}) 
     private List<Aluno> alunos = new ArrayList<Aluno>(); 
    ... 
     public Integer getId() { 
      return id; 
     } 
     public void setId(Integer id) { 
      this.id = id; 
     } 

alunoMBean.java 

@ManagedBean(name="alunoBean") 
@SessionScoped 
public class AlunoMBean implements Serializable { 
... 
    private List<Turma> turmas; 
... 
    public List<Turma> getTurmas() { 
     if(this.aluno.getNome() == null) { 
      List<Turma> listTurma = new ArrayList<Turma>(); 
      return listTurma; 
     } 
     if(this.turmas == null) { //Só busca na tabela a primeira vez da consulta 
      this.turmas = alunoDao.getTurmas(aluno, flagTurma); 
     } 
     return this.turmas; 
    } 

alunoDao.java

public List<Turma> getTurmas(Aluno aluno, Boolean flag) { 

    List<Turma> turmas = new ArrayList<Turma>(); 
    turmas = em.createQuery("from Turma where inativo = 0 and id in (select turma_id from aluno_turma where aluno_id = "+ aluno.getId()+") order by nome ", Turma.class).getResultList(); 
    //That doens't work: Not Mapped 

    //turmas = em.createQuery("from Turma order by nome ", Turma.class).getResultList(); 
    //That works 

    return turmas; 
} 

エラー

01:43:16,105 ERROR [org.jboss.as.ejb3.invocation] (default task-14) WFLYEJB0034: EJB Invocation failed on component AlunoDao for method public java.util.List br.com.mvtech.alumni.dao.AlunoDao.getTurmas(br.com.mvtech.alumni.modelo.Aluno,java.lang.Boolean): javax.ejb.EJBException: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: aluno_turma is not mapped [from br.com.mvtech.alumni.modelo.Turma where inativo = 0 and id in (select turma_id from Aluno_turma where aluno_id = 2) order by nome ] 
at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:187) 
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:277) 

答えて

0

JPQLクエリを作成していますが、SQLフィールドを使用しています。 JPQLは、テーブル構造ではなく構文に対してObject構造を使用します。

あなたは次のことを試すことができます。

Query query = em.createQuery("FROM Turma WHERE inativo = false and :aluno MEBER OF alunos order by nome"); 
query.setParaemter("aluno", aluno); 
query.getResultList(); 
+0

はどうもありがとうございました!!! (私が読んだ約45の記事のうち、1つはあなたのものと同じではなかった) – Mauricio

+0

完了。再度、感謝します。 – Mauricio

関連する問題