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).