Nuevo en las bases de datos. Tener un problema en el que desea que cada instancia de la aplicación para tener su propia base de datos. Tratando de encontrar la manera de implementar esto con la configuración actual del ORM. Actualmente el uso de Javax persistencia. ¿Alguien tiene una solución para esto?
SIMPLE : Quiero tener un nombre único para cada tabla
//thread safe
private EntityManagerFactory emf;
public ImageDAOManager(EntityManagerFactory emf) {
this.emf = emf;
}
....
@Entity
public class ImageDAO implements Serializable {
@Id
private String path;
private int fileSize;
private long date;
private int imageHeight;
private int imageWidth;
private double latitude;
private double longitude;
private String tags;
public ImageDAO(String path, int fileSize, long date, int imageHeight, int imageWidth, double latitude, double longitude) {
this.path = path;
this.fileSize = fileSize;
this.date = date;
this.imageHeight = imageHeight;
this.imageWidth = imageWidth;
this.latitude = latitude;
this.longitude = longitude;
this.tags = "";
}
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence"
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="LecturePU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>backend.database.ImageDAO</class>
<properties>
<!--username and password is temporarily here-->
<property name="javax.persistence.jdbc.url" value="" />
<property name="javax.persistence.jdbc.user" value="" />
<property name="javax.persistence.jdbc.password" value="" />
<!-- EclipseLink should create the database schema automatically -->
<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
<property name="eclipselink.ddl-generation.output-mode" value="database" />
</properties>
</persistence-unit>
</persistence>```
Tener una nueva base de datos para cada instancia de su aplicación no es la solución correcta. En su lugar, usted debe buscar en aplicaciones multi-arrendatario, sugeriría este artículo: https://dzone.com/articles/multi-tenancy-using-jpa-spring-and-hibernate-part
En resumen, una nueva base de datos para cada instancia de su aplicación reducirá seriamente su rendimiento, capacidades para ejecutar consultas históricas, y, potencialmente, problemas con la concurrencia.
Una solución rápida sería tener una columna como tenant_id
o incluso sólo instance_id
lo que ayudaría a asegurar que los datos se consulta sólo para esa instancia.