2014-02-01 3 views
0

Я пытаюсь запустить javax.persistence, но я получаю erros. я создал небольшой проект для тестирования, создание класса сущностей persistence.xml, и запущенный процесс:Проблемы с созданием Java-проекта с JPA

Entity класс:

package glasses; 

import java.io.Serializable; 
import javax.persistence.Entity; 
import javax.persistence.Id; 

@Entity 
public class Hund implements Serializable { 
    @Id 
    private long id; 
    private String name; 
    private String typ; 

    public long getId() { 
     return this.id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    public String getName() { 
     return this.name; 
    } 

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

    public String getTyp() { 
     return this.typ; 
    } 

    public void setTyp(String typ) { 
     this.typ = typ; 
    } 
} 

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> 
    <persistence-unit name="GlassesPU" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <properties> 
     <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/glasses?zeroDateTimeBehavior=convertToNull"/> 
     <property name="javax.persistence.jdbc.password" value="mypwd"/> 
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
     <property name="javax.persistence.jdbc.user" value="root"/> 
     <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

Сообщение об ошибке:

Caused by: 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 glasses.FXMLDocumentController.handleButtonAction(FXMLDocumentController.java:48) 
... 54 more 

Кто-нибудь знает проблему? Что-то не так в классе Hund? Или в persistence.xml?

+0

вы можете показать полное исключение? – Mehdi

+1

Эй, @Mehdi, я просто попытался дать вам сообщение об ошибке здесь, но stackoverflow не примет 6000 символов. Ответ ниже Сабудж Хассан дал рабочий ответ на мою проблему. Хотя сейчас мой проект работает, результат не совсем удовлетворительный. У вас есть идея, как его решить лучше? – Socrates

ответ

1

Используйте свой класс Hund внутри своего persistence.xml, как показано в следующем примере. Просто поместите его между свойствами и тегами единицы продолжительности.

</properties> 
    <class>glasses.Hund</class> 
</persistence-unit> 
+1

Хорошо, я сделал это, и теперь мой пример работает. Но всегда ли я должен интегрировать все классы в persistence.xml? Я думал, что все было сделано, просто поместив @ Entity-Annotation над классом, который мне нужен в качестве таблицы в базе данных. Скажем, теперь я создаю конструкцию из 200 классов, должен ли я поместить их все в файл persistence.xml, используя очки.myclass? – Socrates

+0

Если вы создаете классы отдельно, вы должны сделать это вручную. Но если вы сделаете это с помощью IDE с параметрами 'create objects from tables', тогда IDE обновит файл' persistence.xml' для вас. –

+1

Хорошо, все работает. Спасибо, что помогли, Сабудж! – Socrates

1

Если вы не хотите, чтобы перечислить в persistence.xml все объекты вы можете добавить следующую строку в persistence.xml:

<exclude-unlisted-classes>false</exclude-unlisted-classes> 
Смежные вопросы