¿Hay alguna forma de inicializar el EntityManagersin una unidad de persistencia definida?
Debe definir al menos una unidad de persistencia en el persistence.xmldescriptor de implementación.
¿Puede dar todas las propiedades necesarias para crear un Entitymanager?
- El atributo de nombre es obligatorio. Los demás atributos y elementos son opcionales. (Especificación JPA). Entonces este debería ser más o menos su
persistence.xmlarchivo mínimo :
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
SOME_PROPERTIES
</persistence-unit>
</persistence>
En entornos Java EE, los elementos jta-data-sourcey non-jta-data-sourcese utilizan para especificar el nombre JNDI global de la fuente de datos JTA y / o no JTA que utilizará el proveedor de persistencia.
Entonces, si su servidor de aplicaciones de destino es compatible con JTA (JBoss, Websphere, GlassFish), se persistence.xmlve así:
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
<jta-data-source>jdbc/myDS</jta-data-source>
</persistence-unit>
</persistence>
Si su servidor de aplicaciones de destino no es compatible con JTA (Tomcat), se persistence.xmlve así:
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
<non-jta-data-source>jdbc/myDS</non-jta-data-source>
</persistence-unit>
</persistence>
Si su fuente de datos no está vinculada a un JNDI global (por ejemplo, fuera de un contenedor Java EE), por lo general, definiría las propiedades de proveedor, controlador, URL, usuario y contraseña de JPA. Pero el nombre de la propiedad depende del proveedor de JPA. Entonces, para Hibernate como proveedor de JPA, su persistence.xmlarchivo se verá así:
<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>
Atributo de tipo de transacción
En general, en entornos Java EE, un tipo de transacción RESOURCE_LOCALasume que se proporcionará una fuente de datos que no es JTA. En un entorno Java EE, si no se especifica este elemento, el valor predeterminado es JTA. En un entorno Java SE, si no se especifica este elemento, RESOURCE_LOCALse puede asumir un valor predeterminado de .
- Para asegurar la portabilidad de una aplicación Java SE, es necesario enumerar explícitamente las clases de persistencia administradas que se incluyen en la unidad de persistencia (especificación JPA)
Necesito crear a EntityManagerpartir de los valores especificados por el usuario en tiempo de ejecución
Entonces usa esto:
Map addedOrOverridenProperties = new HashMap();
addedOrOverridenProperties.put("hibernate.show_sql", true);
Persistence.createEntityManagerFactory(<PERSISTENCE_UNIT_NAME_GOES_HERE>, addedOrOverridenProperties);