public String getTableName() { boolean isEmbeddable = meta.getJavaClass().isAnnotationPresent(Embeddable.class); if (isEmbeddable) return "not defined for embeddable entities"; MetadataTools metadataTools = AppBeans.get(MetadataTools.NAME); String databaseTable = metadataTools.getDatabaseTable(meta); return databaseTable != null ? databaseTable : "not defined"; }
/** * @return table name for the given entity, or null if the entity is Embeddable, MappedSuperclass or non-persistent */ @Nullable public String getDatabaseTable(MetaClass metaClass) { if (isEmbeddable(metaClass) || !isPersistent(metaClass)) return null; Class<?> javaClass = metaClass.getJavaClass(); javax.persistence.Table annotation = javaClass.getAnnotation(javax.persistence.Table.class); if (annotation != null && StringUtils.isNotEmpty(annotation.name())) { return annotation.name(); } else if (metaClass.getAncestor() != null) { return getDatabaseTable(metaClass.getAncestor()); } return null; }
public void deleteRecord(Entity... entities) { if (entities == null) return; for (Entity entity : entities) { if (entity == null) continue; MetadataTools metadataTools = metadata().getTools(); MetaClass metaClass = metadata().getClassNN(entity.getClass()); String table = metadataTools.getDatabaseTable(metaClass); String primaryKey = metadataTools.getPrimaryKeyName(metaClass); if (table == null || primaryKey == null) throw new RuntimeException("Unable to determine table or primary key name for " + entity); deleteRecord(table, primaryKey, entity.getId()); } }
protected void hardSetReferenceNull(Entity entity, MetaProperty property) { ((PersistenceImpl) persistence).addBeforeCommitAction(() -> { MetadataTools metadataTools = metadata.getTools(); MetaClass entityMetaClass = metadata.getClassNN(entity.getClass()); while (!entityMetaClass.equals(property.getDomain())) { MetaClass ancestor = entityMetaClass.getAncestor(); if (ancestor == null) throw new IllegalStateException("Cannot determine a persistent entity for property " + property); if (metadataTools.isPersistent(ancestor)) { entityMetaClass = ancestor; } else { break; } } String sql = String.format("update %s set %s = null where %s = ?", metadataTools.getDatabaseTable(entityMetaClass), metadataTools.getDatabaseColumn(property), metadataTools.getPrimaryKeyName(entityMetaClass)); try { log.debug("Set reference to null: {}, bind: [{}]", sql, entity.getId()); QueryRunner queryRunner = new QueryRunner(); queryRunner.update(entityManager.getConnection(), sql, persistence.getDbTypeConverter().getSqlObject(entity.getId())); } catch (SQLException e) { throw new RuntimeException("Error processing deletion of " + entity, e); } }); }
protected void hardDeleteNotLoadedReference(Entity entity, MetaProperty property, Entity reference) { ((PersistenceImpl) persistence).addBeforeCommitAction(() -> { MetadataTools metadataTools = metadata.getTools(); QueryRunner queryRunner = new QueryRunner(); try { String column = metadataTools.getDatabaseColumn(property); if (column != null) { // is null for mapped-by property String updateMasterSql = "update " + metadataTools.getDatabaseTable(metaClass) + " set " + column + " = null where " + metadataTools.getPrimaryKeyName(metaClass) + " = ?"; log.debug("Hard delete un-fetched reference: {}, bind: [{}]", updateMasterSql, entity.getId()); queryRunner.update(entityManager.getConnection(), updateMasterSql, persistence.getDbTypeConverter().getSqlObject(entity.getId())); } MetaClass refMetaClass = property.getRange().asClass(); String deleteRefSql = "delete from " + metadataTools.getDatabaseTable(refMetaClass) + " where " + metadataTools.getPrimaryKeyName(refMetaClass) + " = ?"; log.debug("Hard delete un-fetched reference: {}, bind: [{}]", deleteRefSql, reference.getId()); queryRunner.update(entityManager.getConnection(), deleteRefSql, persistence.getDbTypeConverter().getSqlObject(reference.getId())); } catch (SQLException e) { throw new RuntimeException("Error processing deletion of " + entity, e); } }); }
String dbTable = metaTools.getDatabaseTable(effectiveMetaClass); if (dbTable != null) { includeParam("table.showInfoAction.entityTable", dbTable);