Gibt es eine Möglichkeit, die EntityManager
ohne definierte Persistenzeinheit zu initialisieren ?
Sie sollten mindestens eine Persistenzeinheit im persistence.xml
Bereitstellungsdeskriptor definieren.
Können Sie alle erforderlichen Eigenschaften angeben, um eine zu erstellen Entitymanager
?
- Das Namensattribut ist erforderlich. Die anderen Attribute und Elemente sind optional. (JPA-Spezifikation). Das sollte also mehr oder weniger Ihre minimale
persistence.xml
Datei sein:
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
SOME_PROPERTIES
</persistence-unit>
</persistence>
In Java EE-Umgebungen werden die Elemente jta-data-source
und non-jta-data-source
verwendet, um den globalen JNDI-Namen der JTA- und / oder Nicht-JTA-Datenquelle anzugeben, die vom Persistenzanbieter verwendet werden soll.
Wenn Ihr Zielanwendungsserver JTA (JBoss, Websphere, GlassFish) unterstützt, persistence.xml
sieht es folgendermaßen aus:
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
<jta-data-source>jdbc/myDS</jta-data-source>
</persistence-unit>
</persistence>
Wenn Ihr Zielanwendungsserver JTA (Tomcat) nicht unterstützt, persistence.xml
sieht es folgendermaßen aus:
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
<non-jta-data-source>jdbc/myDS</non-jta-data-source>
</persistence-unit>
</persistence>
Wenn Ihre Datenquelle nicht an eine globale JNDI gebunden ist (z. B. außerhalb eines Java EE-Containers), definieren Sie normalerweise die Eigenschaften von JPA-Anbieter, Treiber, URL, Benutzer und Kennwort. Der Name der Eigenschaft hängt jedoch vom JPA-Anbieter ab. Für Hibernate als JPA-Anbieter persistence.xml
sieht Ihre Datei also folgendermaßen aus:
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>br.com.persistence.SomeClass</class>
<properties>
<property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.ClientDriver"/>
<property name="hibernate.connection.url" value="jdbc:derby://localhost:1527/EmpServDB;create=true"/>
<property name="hibernate.connection.username" value="APP"/>
<property name="hibernate.connection.password" value="APP"/>
</properties>
</persistence-unit>
</persistence>
Transaktionstypattribut
In Java EE-Umgebungen wird bei einem Transaktionstyp im Allgemeinen RESOURCE_LOCAL
davon ausgegangen, dass eine Nicht-JTA-Datenquelle bereitgestellt wird. Wenn in einer Java EE-Umgebung dieses Element nicht angegeben ist, ist der Standardwert JTA. Wenn in einer Java SE-Umgebung dieses Element nicht angegeben ist, kann ein Standardwert von RESOURCE_LOCAL
angenommen werden.
- Um die Portabilität einer Java SE-Anwendung sicherzustellen, müssen die verwalteten Persistenzklassen, die in der Persistenzeinheit enthalten sind (JPA-Spezifikation) , explizit aufgelistet werden.
Ich muss die zur EntityManager
Laufzeit aus den vom Benutzer angegebenen Werten erstellen
Verwenden Sie also Folgendes:
Map addedOrOverridenProperties = new HashMap();
addedOrOverridenProperties.put("hibernate.show_sql", true);
Persistence.createEntityManagerFactory(<PERSISTENCE_UNIT_NAME_GOES_HERE>, addedOrOverridenProperties);