0

アプリケーションの起動時に JPA からエラーが発生します。エラーは名前付きクエリにあります:

org.hibernate.HibernateException: Errors in named queries: MyEntity.MyQuery org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:435)
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385)
org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:883)
org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56)
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)

エンティティ コード:

@NamedQuery(name = "MyEntity.MyQuery", query = "SELECT r FROM MyEntity r WHERE r.cdSecao = :secao AND r.cdPublico IN :publico")


// other class stuff declarations...


    @JoinColumn(name = "cd_publico", referencedColumnName = "cd_publico")
@ManyToOne
private TbPublico cdPublico;

@JoinColumn(name = "cd_secao", referencedColumnName = "cd_secao")
@ManyToOne
private TbSecao cdSecao;

// getters setters and assorted shenanigans...

次に、DAO で、EntityManager の初期化時に例外がスローされていても (名前付きクエリなどであるため)、このメソッドを使用して呼び出します。しかし、完全を期すために、次のようになります。

public List<MyEntity> listMyEntity(String idPublico, TbSecao secao) {
    List<TbPublico> listaPublico = OtherClass.doMcGuffin(idPublico);

    EntityManager em = EMFactory.getEntityManager();
    TypedQuery<MyEntity> theQuery= em.createNamedQuery("MyEntity.MyQuery", MyEntity.class);
    theQuery.setParameter("secao", secao);
    theQuery.setParameter("publico", listaPublico);

    return theQuery.getResultList();

}   

名前付きクエリに戻ります...削除するAND r.cdPublico IN :publicoと機能しますが、必要です。

4

2 に答える 2

1

このようにクエリを変更します

SELECT r FROM MyEntity r WHERE r.cdSecao = :secao AND r.cdPublico IN (:publico)

クエリで IN ステートメントを使用すると、() に入る必要があります。

于 2012-12-16T03:38:43.777 に答える
0

TbPublicoa がどのように a に入ることができるか説明してList<Integer>ください ??? それはおそらくINである可能性がありますList<TbPublico>

于 2012-12-15T10:37:39.893 に答える