¿Hay alguna manera de inicializar el EntityManager
sin una unidad de persistencia definida?
Debe definir al menos una unidad de persistencia en el descriptor de despliegue persistence.xml
.
¿Puede dar todas las propiedades necesarias para crear un Entitymanager
?
- El atributo de nombre es obligatorio. Los otros atributos y elementos son opcionales. (Especificación JPA). Por lo que este debe ser más o menos el mínimo
persistence.xml
archivo:
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
SOME_PROPERTIES
</persistence-unit>
</persistence>
En entornos Java EE, los jta-data-source
y non-jta-data-source
elementos se utilizan para especificar el nombre JNDI global de la JTA y/o no Fuente de datos JTA para ser utilizada por el proveedor de persistencia.
Así que si su servidor de aplicaciones de destino admite JTA (JBoss, Websphere, GlassFish), su persistence.xml
se parece a:
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
<!--GLOBAL_JNDI_GOES_HERE-->
<jta-data-source>jdbc/myDS</jta-data-source>
</persistence-unit>
</persistence>
Si el servidor de aplicaciones de destino no admite JTA (Tomcat), sus persistence.xml
miradas como:
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
<!--GLOBAL_JNDI_GOES_HERE-->
<non-jta-data-source>jdbc/myDS</non-jta-data-source>
</persistence-unit>
</persistence>
Si su fuente de datos no está vinculado a un JNDI mundial (por ejemplo, fuera de un contenedor Java EE), por lo que por lo general se definen proveedor JPA, conductor, u rl, usuario y contraseña. Pero el nombre de la propiedad depende del proveedor de JPA. Así, por Hibernate como proveedor JPA, su persistence.xml
archivo se ve 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>
Tipo Transacción Atributo
En general, en entornos Java EE, un tipo de transacción de RESOURCE_LOCAL
supone que un no Se proporcionará el origen de datos de JTA. En un entorno Java EE, si este elemento no está especificado, el valor predeterminado es JTA. En un entorno Java SE, si no se especifica este elemento, se puede suponer un valor predeterminado de RESOURCE_LOCAL
.
- para asegurar la portabilidad de una aplicación Java SE, es necesario incorporar explícitamente las clases de persistencia gestionados que están incluidos en la unidad de persistencia (especificación JPA)
I necesita crear el EntityManager
a partir de los valores especificados por el usuario en el tiempo de ejecución
Así que utilice esto:
Map addedOrOverridenProperties = new HashMap();
// Let's suppose we are using Hibernate as JPA provider
addedOrOverridenProperties.put("hibernate.show_sql", true);
Persistence.createEntityManagerFactory(<PERSISTENCE_UNIT_NAME_GOES_HERE>, addedOrOverridenProperties);
Hola me trataron su solución, pero tienen problemas, ¿podría comprobar mi pregunta: ¿http://stackoverflow.com/ preguntas/3935394/how-to-externalize-properties-from-jpas-persistence-xml – stacker
@stacker Estoy revisando –