🔄 AutoDD: Geração Automática do Dicionário de Dados (Data Dictionary)
Acesso Antecipado (Beta)Esta documentação refere-se a uma versão em acesso antecipado do SDK Sankhya. As funcionalidades e APIs estão sujeitas a modificações. Para obter acesso, envie um e-mail para [email protected] informando a
appkeydo seu projeto.
🔄 AutoDD: Geração Automática do Dicionário de Dados (Data Dictionary)
📝 O que é o AutoDD?
O AutoDD (Auto Data Dictionary) é uma feature do SDK Sankhya que gera automaticamente o dicionário de dados XML (data dictionary) a partir das suas entidades Java anotadas com @JapeEntity.
O dicionário de dados é o coração do ORM Jape da Sankhya: todas as entidades precisam ser mapeadas através dele para que o framework reconheça tabelas, campos, chaves e relacionamentos.
Com o AutoDD, o desenvolvedor não precisa mais criar manualmente arquivos XML para mapear suas entidades. Basta anotar corretamente a classe com @JapeEntity e os campos (@Id, @Column, etc.), e o framework gera o XML automaticamente durante o build.
O AutoDD não substitui o mapeamento manual de outras features como views, menus, dashboards, tree table, filters etc.
Ele é focado exclusivamente no mapeamento de Table e NativeTable.
🔗 Relação entre AutoDD e AutoDDL
- AutoDD: Gera o dicionário de dados XML a partir das entidades Java.
- AutoDDL: Converte o dicionário de dados XML (gerado pelo AutoDD ou manual) em scripts DDL (
CREATE/ALTER) para Oracle/MSSQL.
Essas features são complementares:
- O AutoDD elimina o trabalho manual de criar o XML.
- O AutoDDL elimina o trabalho manual de converter o XML em DDL.
Para usar o fluxo completo, é necessário habilitar ambas as features no build.gradle da raiz do projeto:
addon {
autoDD = true
autoDDL = true
}✨ Benefícios do AutoDD
-
⚡ Agilidade
Não é mais necessário criar XMLs manualmente para mapear entidades
(views, menus, dashboards etc. ainda precisam ser mapeados manualmente). -
🎯 Menos Erro Humano
Reduz falhas comuns de digitação e inconsistências de tipos. -
📏 Padronização
Garante que o modelo Java e o dicionário de dados estejam sempre sincronizados. -
🔄 Integração Total
Permite uso imediato do AutoDDL para geração de scripts de banco.
⚙️ Como Funciona?
- Defina sua entidade usando
@JapeEntitye anotações de campo (@Id,@Column, etc.). - Habilite o AutoDD no
build.gradleda raiz. - Execute o build do projeto:
./gradlew clean deployAddon- O AutoDD processa as entidades e gera automaticamente o XML na pasta de build.
- (Opcional) Se o AutoDDL estiver habilitado, o XML será convertido em scripts SQL DDL para Oracle/MSSQL.
💡 Exemplo Prático
1️⃣ Entidade Simples
@Data
@NoArgsConstructor
@JapeEntity(
entity = "TST_MinhaClasse",
table = "TST_MINHA_CLASSE",
description = "Minha Classe Exemplo"
)
public class MinhaClasse {
@Id
@GeneratedValue(strategy = GeneratedValue.GenerationType.AUTO)
@Column(name = "ID", dataType = DataType.INTEGER, description = "Id")
private Long id;
@Column(name = "MSG", dataType = DataType.TEXT, description = "Mensagem")
private String mensagem;
@Column(name = "OUTRO_FIELD", dataType = DataType.INTEGER, description = "Outro Campo")
private Long outroField;
}2️⃣ Entidades com Relacionamentos
O AutoDD mapeia relacionamentos usando:
@JoinColumn(PK simples)@JoinColumns(PK composta)
🔹 Relacionamento com PK Simples
@Data
@NoArgsConstructor
@JapeEntity(
entity = "TST_MinhaClasse",
table = "TST_MINHA_CLASSE",
description = "Minha Classe Exemplo"
)
public class MinhaClasse {
@Id
@GeneratedValue(strategy = GeneratedValue.GenerationType.AUTO)
@Column(name = "ID", dataType = DataType.INTEGER, description = "Id")
private Long id;
@Column(name = "MSG", dataType = DataType.TEXT, description = "Mensagem")
private String mensagem;
@OneToMany(
cascade = Cascade.ALL,
orphanRemovalStrategy = OrphanRemovalStrategy.DETACH
)
private List<MinhaOutraClasse> itens;
}@Data
@NoArgsConstructor
@JapeEntity(
entity = "TST_MinhaOutraClasse",
table = "TST_MINHA_OUTRA_CLASSE",
description = "Minha Outra Classe Exemplo"
)
public class MinhaOutraClasse {
@Id
@GeneratedValue(strategy = GeneratedValue.GenerationType.AUTO)
@Column(name = "ID", dataType = DataType.INTEGER, description = "Id")
private Long id;
@Column(
name = "STATUS",
dataType = DataType.LIST,
description = "STATUS",
options = {
@Option(label = "Ativo", value = "ATIVO"),
@Option(label = "Inativo", value = "INATIVO")
}
)
private Status status;
@ManyToOne(cascade = Cascade.MERGE)
@JoinColumn(
name = "MINHA_ENTIDADE_ID",
referencedColumnName = "ID",
dataType = DataType.INTEGER,
description = "Referência para MinhaClasse"
)
private MinhaClasse minhaClasse;
}📋 Boas Práticas
- Use prefixos exclusivos para tabelas e entidades (ex:
SGT_,LOG_) - ❌ Nunca use prefixo
AD_(reservado do sistema) - Sempre revise scripts antes de aplicar em produção
Updated about 2 hours ago
