Ir al contenido
Otras versiones

Cargando…

Usar su propia tabla de base de datos desde Java

La clase DatabaseMetadataUtils dispone de un conjunto de métodos para consultas de selección, actualización y borrado:

Método Retorno Descripción
buildQuery(String table, String filter, String order) String Devuelve una consulta de selección de hibernate.
buildUpdate(String table, String values, String filter) String Devuelve una consulta de actualización de hibernate.
buildDelete(String table, String filter) String Devuelve una consulta de borrado de hibernate.
  • Estas consultas pueden ejecutarse mediante el método executeHQL(String query) de la clase LegacyDAO.

Registrar la definición de la tabla de metadatos de la base de datos

Sección titulada «Registrar la definición de la tabla de metadatos de la base de datos»

Vaya a Administration > Tools > Database query y ejecute el SQL:

INSERT INTO OKM_DB_METADATA_TYPE (DMT_TABLE, DMT_REAL_COLUMN, DMT_TYPE, DMT_VIRTUAL_COLUMN) VALUES ('security', 'col00', 'text', 'uuid_id');
INSERT INTO OKM_DB_METADATA_TYPE (DMT_TABLE, DMT_REAL_COLUMN, DMT_TYPE, DMT_VIRTUAL_COLUMN) VALUES ('security', 'col01', 'text', 'type');
INSERT INTO OKM_DB_METADATA_TYPE (DMT_TABLE, DMT_REAL_COLUMN, DMT_TYPE, DMT_VIRTUAL_COLUMN) VALUES ('security', 'col02', 'text', 'name');

Fichero ExtendedSecurity.java:

public class ExtendedSecurity extends DatabaseMetadataCommon implements IsSerializable {
public static final String TYPE_USER = "user";
public static final String TYPE_ROLE = "role";
// Metadata Virtual Name mapping
public static final String MV_TABLE_NAME = "security";
public static final String MV_COLUMN_NAME_UUID = "uuid_id";
public static final String MV_COLUMN_NAME_TYPE = "type";
public static final String MV_COLUMN_NAME_NAME = "name";
private String uuid;
private String type;
private String name;
@Override
public void loadFromMap(Map<String, String> map) {
super.loadFromMap(map);
if (map.containsKey(MV_COLUMN_NAME_UUID)) {
setUuid(map.get(MV_COLUMN_NAME_UUID));
}
if (map.containsKey(MV_COLUMN_NAME_TYPE)) {
setType(map.get(MV_COLUMN_NAME_TYPE));
}
if (map.containsKey(MV_COLUMN_NAME_NAME)) {
setName(map.get(MV_COLUMN_NAME_NAME));
}
}
@Override
public Map<String, String> restoreToMap() {
Map<String,String> map = super.restoreToMap();
if (uuid != null) {
map.put(MV_COLUMN_NAME_UUID, getUuid());
}
if (type != null) {
map.put(MV_COLUMN_NAME_TYPE, getType());
}
if (name != null) {
map.put(MV_COLUMN_NAME_NAME, getName());
}
return map;
}
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

Fichero Example.java:

public class Example {
public test() {
// get sequence
Double seq = new Double(DatabaseMetadataDAO.getNextSequenceValue("table_name", "col_name"));
// create value
final ExtendedSecurity security = new ExtendedSecurity();
security.setUuid("some uuid");
security.setName("some name");
security.setType(ExtendedSecurity.TYPE_ROLE);
security.setRealTable(ExtendedSecurity.MV_TABLE_NAME);
Double newValue = new Double(DatabaseMetadataDAO.createValue(DatabaseMetadataUtils.getDatabaseMetadataValueByMap(security.restoreToMap())));
// Execute query
String filter = "$" + ExtendedSecurity.MV_COLUMN_NAME_UUID + "='some uuid'";
DatabaseMetadataDAO.executeValueQuery(DatabaseMetadataUtils.buildQuery(ExtendedSecurity.MV_TABLE_NAME, filter, "")));
// Update value
security.setName("some name changed");
DatabaseMetadataDAO.updateValue(DatabaseMetadataUtils.getDatabaseMetadataValueByMap(security.restoreToMap()));
// Delete value
DatabaseMetadataDAO.deleteValue(DatabaseMetadataUtils.getDatabaseMetadataValueByMap(security.restoreToMap()).getId());
}
}

También pueden hacerse uniones (joins) entre tablas. Para ello debe utilizarse el método executeMultiValueQuery:

List<String> tables = new ArrayList<String>();
tables.add(GWTCountry.MV_TABLE_NAME);
tables.add(GWTState.MV_TABLE_NAME);
String query = "from DatabaseMetadataValue dmv1, DatabaseMetadataValue dmv2 ";
query += "where dmv1.table='" + GWTCountry.MV_TABLE_NAME + "' ";
query += "and dmv2.table='" + GWTState.MV_TABLE_NAME + "' ";
query += "and dmv1.$" + GWTCountry.MV_COLUMN_COUNTRY_NAME + "='SPAIN' ";
query += "and dmv1.$" + GWTCountry.MV_COLUMN_COUNTRY_NAME + "=" + "dmv2.$" + GWTState.MV_COLUMN_COUNTRY_NAME;
DatabaseMetadataDAO.executeMultiValueQuery(DatabaseMetadataUtils.replaceVirtual(tables, query));