【问题标题】:Object: is not a known Entity type. Eclipselink对象:不是已知的实体类型。 Eclipselink
【发布时间】:2016-09-14 09:58:06
【问题描述】:

我是 eclipselink 或 jpa 的新手。我正在关注here 的 eclipselink 教程。运行 Test.java 类时出现以下异常。我正在通过网络使用 oracle 数据库。请帮帮我。

[EL Info]: connection: 2016-09-14 15:13:33.562--ServerSession(271944754)--/file:/D:/Developer/EclipseLink/bin/_TestPersistence login successful
[EL Warning]: metamodel: 2016-09-14 15:13:33.577--The collection of metamodel types is empty. Model classes may not have been found during entity search for Java SE and some Java EE container managed persistence units.  Please verify that your entity classes are referenced in persistence.xml using either <class> elements or a global <exclude-unlisted-classes>false</exclude-unlisted-classes> element
Exception in thread "main" java.lang.IllegalArgumentException: Object: Employee [name=Mukesh, email=m@gmail.com , department=Finance] is not a known Entity type.
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4226)
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:507)
    at com.assignment.Test.main(Test.java:28)

persistence.xml

<?xml version="1.0" encoding="UTF-8" ?>
<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_2_0.xsd"
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="TestPersistence"
transaction-type="RESOURCE_LOCAL">
<class>com.assignment.Employee</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="javax.persistence.jdbc.url"
value="jdbc:oracle:thin:@ipaddress:port/servicename" />
<property name="javax.persistence.jdbc.user" value="username" />
<property name="javax.persistence.jdbc.password"
value="password" />
<!-- EclipseLink should create the database schema automatically -->
<property name="eclipselink.ddl-generation" value="create-tables" />
<property name="eclipselink.ddl-generation.output-mode"
value="database" />
</properties>
</persistence-unit>
</persistence>

Employee.java

package com.assignment;
public class Employee {
        private Long id;
        private String name;
        private String email;
        private String department;

        public Long getId() {
            return id;
        }
        public void setId(Long id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
        public String getDepartment() {
            return department;
        }
        public void setDepartment(String department) {
            this.department = department;
        }
        public String toString() {
            return "Employee [name=" + name + ", email=" + email + " , department="
                    + department + "]";
        }
}

Test.java

package com.assignment;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

public class Test {
    private static final String PERSISTENCE_UNIT_NAME = "TestPersistence";
      private static EntityManagerFactory factory;
      public static void main(String[] args) {
        factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
        EntityManager em = factory.createEntityManager();
        em.getTransaction().begin();
        Employee emp = new Employee();
        emp.setName("Mukesh");
        emp.setEmail("m@gmail.com");
        emp.setDepartment("Finance");
        em.persist(emp);
        em.getTransaction().commit();
        em.close();
      }
    }

包结构

【问题讨论】:

    标签: java jpa eclipselink


    【解决方案1】:

    尝试为Employee类使用javax.persistence.Entity注解。

    EclipseLink 使用的更多信息和示例: https://wiki.eclipse.org/EclipseLink/Examples/JPA

    【讨论】:

    • 这不是网站正在寻找的那种答案,这充其量只是一个评论,而且是一个糟糕的评论,它基本上也是一个“仅链接的答案”,当链接失效了。
    【解决方案2】:

    给你的类添加@Entity注解。您可能还需要一个主键 ID,将 @Id 指定为属性之一。

    package com.assignment;
    
    import javax.persistence.Entity;
    import javax.persistence.Id;
    
    @Entity
    public class Employee {
            @Id
            private Long id;
            private String name;
            private String email;
            private String department;
    
            public Long getId() {
                return id;
            }
            public void setId(Long id) {
                this.id = id;
            }
            public String getName() {
                return name;
            }
            public void setName(String name) {
                this.name = name;
            }
            public String getEmail() {
                return email;
            }
            public void setEmail(String email) {
                this.email = email;
            }
            public String getDepartment() {
                return department;
            }
            public void setDepartment(String department) {
                this.department = department;
            }
            public String toString() {
                return "Employee [name=" + name + ", email=" + email + " , department="
                        + department + "]";
            }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      相关资源
      最近更新 更多