【问题标题】:Java Persistence IssueJava 持久性问题
【发布时间】:2011-01-16 03:56:34
【问题描述】:

我正在尝试通过 GlassFish 在 EJB 中使用 JPA 启动并运行一个简单的示例。我有以下persistence.xml

<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/wms</jta-data-source>
    <class>com.xxx.xxx.datamodel.MyTest</class>
    <exclude-unlisted-classes /> 
    <properties>
      <property name="eclipselink.target-server" value="SunAS9"/>
      <property name="eclipselink.logging.level" value="FINEST"/>
      <property name="eclipselink.target-database" value="Oracle"/>

      <property name="eclipselink.jdbc.driver" value="oracle.jdbc.OracleDriver" />  
        <property name="eclipselink.jdbc.url" value="[dbconnectionstring]" />
        <property name="eclipselink.jdbc.user" value="user" />  
        <property name="eclipselink.jdbc.password" value="password" />  
    </properties>
  </persistence-unit>
</persistence>

一个简单的实体:

package com.xxx.xxx.datamodel;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "move_task")
public class MyTest {

    private int key;
    private String description;

    @Id
    public int getKey(){
        return key;
    }

    public void setKey(int key){
        this.key = key;
    }

    public String getDescription(){
        return this.description;
    }

    public void setDescription(String description){
        this.description = description;
    }

    @Override
    public String toString(){
        return "Key: " + key + " Description: " + description;
    }

}

最后下面的代码尝试使用上面的:

private void jpaCall() {
        try{
            emf = Persistence.createEntityManagerFactory("default");
            em = emf.createEntityManager();
            log.info("JPA init complete");

            final List<MyTest> list = em.createQuery("select p from MyTest p").getResultList();

            for (MyTest current : list) {
                final String description = current.getDescription();
                log.info("JPA: Desc: " + description);
            }

        }
        catch(Exception e){
            log.error("Error on JPA", e);
        }

    }

当它作为我的 EJB 初始化的一部分运行时,我收到以下错误:

java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: 
Exception Description: Error compiling the query [select p from MyTest p]. Unknown entity type [MyTest].
...
Caused by: Exception [EclipseLink-8034] (Eclipse Persistence Services - 2.0.0.v20091127-r5931): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Error compiling the query [select p from MyTest p]. Unknown entity type [MyTest].

我不确定自己做错了什么,如果有任何帮助,我将不胜感激。

干杯,

詹姆斯

【问题讨论】:

  • 你如何打包这一切?你把persistence.xml放在哪里?
  • 从 Eclipse 部署到 glassfish。 persistence.xml 位于 EJB 的 META-INF 目录中。
  • 我知道它正在查找persistence.xml,因为如果我将其更改为具有无效的提供程序,我会得到适当的异常:org.eclipse.persistence.jpa.PersistenceProviderjhjh javax .persistence.PersistenceException: EntityManager 没有持久性提供程序命名为默认
  • 好的,很好。那么这不是问题:)
  • 在查询中尝试完全限定名称。即com.ocado.atlas.datamodel.MyTest 而不仅仅是MyTest,并告诉我们结果。

标签: java jpa glassfish ejb-3.0


【解决方案1】:

因此,正如上面的 cmets 所暗示的,这似乎是 glassfish 的 eclipse 插件的问题。手动部署耳朵时我没有问题。

感谢大家的帮助。

詹姆斯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 2012-09-12
    • 2013-05-10
    相关资源
    最近更新 更多