2013-11-16 5 views
1

Я пытаюсь вставить свой объект-ученик в таблицу учеников в базе данных mydb, но всегда получаю исключение. Однако подключение к таблице с использованием Connection работает правильно. Я использую Eclipse с EclipseLink.JPA Entity неизвестно

класс сущностей

package student; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.Table; 
@Entity 
@Table(name = "STUDENTS") 
public class Student { 
    @Id 
    @Column(name = "studentID") 
    @GeneratedValue 
    private int id; 
    @Column(name = "NAME") 
    private String name; 
    @Column(name = "GROUPNUM") 
    private String groupNum; 
    @Column(name="AVGMARK") 
    private double avgMark; 


    public Student(){} 

    public Student(String name, String groupNum, double avgMark) { 
     this.name = name; 
     this.groupNum = groupNum; 
     this.avgMark = avgMark; 

    } 


    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getGroupNum() { 
     return groupNum; 
    } 

    public void setGroupNum(String groupNum) { 
     this.groupNum = groupNum; 

    } 

    public double getAvgMark() { 
     return avgMark; 
    } 

    public void setAvgMark(double avgMark) { 
     this.avgMark = avgMark; 
    } 

} 

метод в моем классе

package connector; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.Statement; 

import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
public void insertIntoStudents(Student st) { 
     EntityManagerFactory factory = Persistence.createEntityManagerFactory(
       "students"); 
     EntityManager em = factory.createEntityManager(); 
     // Begin a new local transaction so that we can persist a new entity 
     em.getTransaction().begin(); 
     em.persist(st); 
     em.getTransaction().commit(); 
     em.close(); 


    } 

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="students" transaction-type="RESOURCE_LOCAL"> 
    <class>student.Student</class> 
    <properties> 
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
     <property name="javax.persistence.jdbc.url" 
     value="jdbc:mysql://localhost/mydb" /> 
     <property name="javax.persistence.jdbc.user" value="sqluser" /> 
     <property name="javax.persistence.jdbc.password" value="sqluserpw" /> 
    </property></properties> 

    </persistence-unit> 
</persistence> 

Исключение

Exception in thread "main" java.lang.IllegalArgumentException: Object: [email protected] is not a known entity type. 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4228) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) 
    at connector.DBconnector.insertIntoStudents(DBconnector.java:60) 
    at Main.main(Main.java:10) 
+1

Вы также должны указать импорт. – Ioan

+0

Кроме того, объекты должны иметь конструктор без аргументов. –

+0

@loan Я добавил импорт –

ответ

2

Поместить полное имя объекта в постоянство xml. Я имею в виду полное имя пакета

package com.mycom.api.data; 

@entity 
public class student{ 

... 
.. 
.. 
} 

Вы должны положить com.mycom.api.data.student в persistence.xml.

+0

мой пакет называется студент, поэтому полное имя пакета - студент. Студент. –