Utworzenie EntityManagerFactory albo SessionFactory w Java EE

0

Witajcie,

Jako Providera JPA stwierdziłem, że wybiorę Hibernate. Nie używam jeszcze Springa, później zacznę. Na naukę w sumie mam czas. Zacząłem oglądać kurs z YT od @owca. Używam najnowszego Hibernate. Oto mój pom.xml. Kodu w sumie żadnego nie ma oprócz @Entity opisującego usera i pustego beana @local, @stateless. Z kursu dowiedziałem się, że starsze wersje H używały hibernate.cfg.xml, a nowe używają persistence.xml. Znaczy mam utworzyć persistence.xml? Mam umieścić je w META-INF? Jak mam utworzyć w Web App EntityManagerFactory jak w kursie na hibernate.org pisało, że może istnieć jedno na program. Z tym problem, że te dwa kursy (oficjalny i od @owca) opisują to w Java SE.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>pl.bajos</groupId>
    <artifactId>blog</artifactId>
    <version>0.1</version>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.4-1204-jdbc41</version>
        </dependency>
        <dependency>
            <groupId>org.mindrot</groupId>
            <artifactId>jbcrypt</artifactId>
            <version>0.3m</version>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
        </dependency>
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
            <version>1.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.0.5.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.0.5.Final</version>
        </dependency>
    </dependencies>
</project>

#mistrzpowraca @Shalom

2

Z kursu dowiedziałem się, że starsze wersje H używały hibernate.cfg.xml, a nowe używają persistence.xml

To jakiś lipny kurs. Hibernate używa hibernate.cfg.xml a JPA używa persistence.xml. Jeśli używasz Hibernate jako dostawcy dla JPA to używasz tego drugiego.

1

Skoro używasz mavena to masz strukture projektu mavena, czyli persistence.xml ląduje w folderze resources. Powinieneś zastosować podział na moduły, ale to twoja sprawa. EntityManager powinien być jeden po prostu zrób sobie z tego singleton lub po prostu wklep gdzieś
statica

1
Miły Adolf napisał(a):

(...) EntityManager powinien być jeden

EntityManagerFactory powinien być jeden na aplikację. Zaś obiektów EntityManager możesz mieć wiele.

0

Oczywiście mi, także chodziło o factory po prostu pisałem na szybko, zrobiłem błąd, i nie mogę edytować postu jako anonim

0

Znalazłem coś takiego: http://tomee.apache.org/injection-of-entitymanager-example.html. Mój persistence jest:

<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="blogPersistence">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="javax.persistence.jdbc.jdbc" value="jdbc:postgresql://localhost/blog" />
            <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
            <property name="javax.persistence.jdbc.user" value="blog" />
            <property name="javax.persistence.jdbc.password" value="#tegomuwioniepodawać" />

            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL94Dialect" />
            <property name="hibernate.hbm2ddl.auto" value="create-drop" />
        </properties>
    </persistence-unit>
</persistence>

IntelliJ skreśla mi HibernatePersistence w <provider>org.hibernate.ejb.HibernatePersistence</provider>, mówi że deprecated. Łaj? Jak zrobie @PersistenceContext to wychodzi na to, że serwer aplikacji zarządza EntytyManagerFactory? Używam GlassFisha najnowszego.

1

Tak, serwer aplikacji zarządza sobie EntityManagerFactory. Ty tylko wstrzykujesz EntityManager do swoich klas :).

1 użytkowników online, w tym zalogowanych: 0, gości: 1