• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java JPA unknow entity

Object Storage Arubacloud
0 głosów
919 wizyt
pytanie zadane 6 września 2017 w Java przez Wally Bywalec (2,840 p.)
edycja 6 września 2017 przez Wally

EDIT: Zrobiłem drugi identyczny projekt (identyczne wersje dependencies), tylko na Maven zamiast Gradle i wszystko działa. Tylko na Gradle nie.
Przy projekcie Gradle, jak dodam do persistence.xml, linijke z <class>model.User</class> to działa. Przy Mavenie nie muszę tego robić. W zasadzie problem zniknął, ale jednak powinno się dać bez tej dodatkowej linijki.

 

Odpalam program i dostaję taki exception:

Exception in thread "main" java.lang.IllegalArgumentException: Unknown entity: model.User

Nowy projekt na gradle. Dependencies na: 

compile group: 'org.hibernate', name: 'hibernate-core', version: '5.2.10.Final'
compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.13'

Odpalany plik Main.java (żeby krócej to tylko main, plus są importy same na javax.persistence):

public static void main(String[] args) {
        EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("myDatabase");
        EntityManager entityManager = entityManagerFactory.createEntityManager();

        User u = new User();
        u.setName("Test");

        entityManager.getTransaction().begin();
        entityManager.persist(u);
        entityManager.getTransaction().commit();

        entityManager.close();
        entityManagerFactory.close();
    }

Plik encji User (+ settery/gettery, importy na javax.persistence tylko; czesty blad to Entity z hibernate; ja mam poprawnie z javax.persistence.Entity):

@Entity
public class User {

    public User() {}

    @Id
    @GeneratedValue
    private long ID;

    private String name;
}

Oraz konfiguracja w src/resources/META-INF/persistence.xml:

<persistence 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_2_0.xsd"
             version="2.0">
    <persistence-unit name="myDatabase" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value=""/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hibernateTest"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
            <property name="hibernate.hbm2ddl.auto" value="create"/>
        </properties>
    </persistence-unit>
</persistence>

 

Przekopałem wiele tematów na stackoverflow itp i nic. Gdy odpalę ten projekt i nie użyję nic z encji User, tylko puszczę natywne query na "SELECT VERSION()" to dostaję - połączenie OK. Jest także odpowiedni provider co powyższym configu - dawniej się używało coś z org.hibernate.ejb. 

Nie mam pojęcia co jest nie tak, że nie potrafi utworzyć tabeli z tej encji, tylko leci exception. Nie zna entity User'a, ale jest przecież podmappowane poprawnie przez @Entity (z javax.persistence.Entity).

komentarz 6 września 2017 przez mbabane Szeryf (79,280 p.)
edycja 6 września 2017 przez mbabane

A te encje nie powinny miec jeszcze adnotacji:

@Table(name = "nazwa_tabeli_w_mysql")
komentarz 6 września 2017 przez Jonki Dyskutant (8,180 p.)
Niestety nie. Bez tej adnotacji powinno utworzyć tabelę automatycznie o nazwie klasy z małej litery.
komentarz 6 września 2017 przez mbabane Szeryf (79,280 p.)

a implementacja interfejsu Serializable?

komentarz 6 września 2017 przez Wally Bywalec (2,840 p.)
edycja 6 września 2017 przez Wally
@mbabane: Dodałem do klasy User "implements Serializable", tylko nie wiem czy to OK, bo nie wymaga to implementacji żadnych metod - pusty interface. Ale idąc dalej, to i tak nie działa.
komentarz 6 września 2017 przez mbabane Szeryf (79,280 p.)

Sprawdz to:

http://o7planning.org/en/11223/generate-tables-from-entity-classes-in-hibernate

i szukaj pod haslem hibernate generate table from entity

komentarz 6 września 2017 przez Wally Bywalec (2,840 p.)

Em, mogłeś nie zauważyć, ale już dawno temu edytowałem posta, że kod działa - tworzy się tabela na podstawie encji Usera. Problem częściowo rozwiązany. Sprawa już nie tyczy się JPA / Hibernate, tylko narzędzi budowania. Maven/Gradle coś inaczej buduje, że tu działa, tam nie.

Już problem nie jest priorytetowy bo działa i można to zostawić. Komuś kiedyś może pomoże jak na gradlu nie będzie wiedział dlaczego nie działa, to trafi tu i się dowie że to coś z build tools i że na mavenie to samo działa.

Gdzieś ktoś pisał na stackoverflow, że to coś z build tools i coś z tymi katalogami, klasami, polecił dodać do gradla taką linijkę

sourceSets.main.output.resourcesDir = sourceSets.main.output.classesDir

Ale coś nie działa, nie wnikam dalej.

Natomiast ten link co podajesz, to dokładnie nie wiem, ale sporo kodu tam więcej. Inaczej wygląda konfiguracja. Propertiesy jakieś hibernatowe, a ja wolę się raczej trzymać ogólniejszego javax.persistence. Bo gdyby kiedyś wymienić hibernate na coś innego? No może nie, ale lepiej polegać na abstrakcji, chyba. No a poza tym to co wyżej, to coś z build tools. Maven działa, Gradle nie. A kod ten sam.

1 odpowiedź

0 głosów
odpowiedź 6 września 2017 przez Jonki Dyskutant (8,180 p.)
Nigdy nie bawiłem się w pisanie xml, ale spróbuj zajrzeć tutaj https://stackoverflow.com/questions/1780341/do-i-need-class-elements-in-persistence-xml.

Podobne pytania

0 głosów
0 odpowiedzi 188 wizyt
pytanie zadane 8 marca 2019 w Java przez Piotr Kusnierkiewicz Użytkownik (670 p.)
+1 głos
1 odpowiedź 2,085 wizyt
pytanie zadane 8 czerwca 2016 w Java przez jocom Początkujący (390 p.)
0 głosów
1 odpowiedź 158 wizyt
pytanie zadane 12 maja 2023 w Java przez Mikołaj Pątkowski Użytkownik (530 p.)

92,568 zapytań

141,420 odpowiedzi

319,620 komentarzy

61,954 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...