在EJB模块中使用实体时,实体未映射异常

时间:2013-10-02 09:11:32

标签: java hibernate jboss ejb persistence

我遇到了实体映射问题。

这是包含几个模块的JBoss,其中一个模块包含带有

注释的实体映射的包
@Entity 
@Table(name = "PG_ATTR_A")
public class PgAttrA
// declaration omitted
}

在单独的包和单独的EJB模块中,我有一个DAO来访问此数据

@Stateless
@Clustered
public class PgAttrDao implements PgAttrDaoLocal, PgAttrDaoRemote {

    @PersistenceContext (unitName = "Persistence_Unit")
    EntityManager entityManager;

    public List<PgAttrA> find(...) {
        Query query = entityManager.createQuery("FROM PgAttrA WHERE ..skiped..");
        // set some parameters, skipped
        return query.getResultList();
    }
}

persistence.xml的内容     http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd“version =”1.0“&gt;

<persistence-unit name="Persistence_Unit" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>DS</jta-data-source>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.DB2Dialect"/>
        <property name="hibernate.cache.use_second_level_cache" value="false"/>          
        <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
    </properties>
</persistence-unit>

问题是DAO似乎不知道在PgAttr类中声明的ORM。

我有这个特殊的例外:

  

目标VM发生异常:   org.hibernate.hql.ast.QuerySyntaxException:未映射PgAttrA   [FROM PgAttrA WHERE ..skiped ..] java.lang.IllegalArgumentException:   org.hibernate.hql.ast.QuerySyntaxException:未映射PgAttrA   [来自PgAttrA WHERE ..skiped ..]

我有一些其他DAO在与实体本身相同的模块中访问这个特定实体,它就像一个魅力。我只是无法访问该DAO的来源以添加一些新功能。

所以问题是为什么我的DAO没有看到映射,我该怎么做才能修复它?

2 个答案:

答案 0 :(得分:0)

如果您使用JPQL将查询更改为:

 Query query = entityManager.createQuery("SELECT p FROM PgAttrA p WHERE ..skiped..");

来自here

的JPQL查询示例

如果您使用HQL:

Query query = entityManager.createQuery("FROM PgAttrA AS p WHERE ..skiped..");

来自here

的HQLQueries示例

如果问题仍未解决,请检查persistence.xml

答案 1 :(得分:0)

事实上,我刚刚错过了persistence.xml中的jar文件声明

所以我添加了

<jar-file>../jar_where_persistence_declared.jar</jar-file>

之后

<jta-data-source>DS</jta-data-source>

问题已经消失