Usar su propia tabla de base de datos desde Java
Métodos
Sección titulada «Métodos»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.
Ejemplo
Sección titulada «Ejemplo»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');Clases Java
Sección titulada «Clases Java»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()); }}Avanzado
Sección titulada «Avanzado»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));