I Custom Data Types (CDT) in Appian utilizzano le annotazioni JPA (Java Persistence API) all’interno della loro definizione XSD (XML Schema Definition) per personalizzare il modo in cui i dati vengono mappati e gestiti in un database relazionale.
Utilizzo delle Annotazioni JPA
Le annotazioni JPA sono essenziali quando si mappa un CDT alle tabelle e colonne del database.
- Inclusione nell’XSD: Per utilizzare un’annotazione JPA, essa deve essere inclusa all’interno del tag
<xsd:appinfo>che ha l’attributosourceimpostato su"appian.jpa". - Generazione Automatica: Molte delle configurazioni di base, come la specificazione della chiave primaria (
@Id) o la definizione delle relazioni tra tabelle, vengono aggiunte automaticamente da Appian quando si crea un tipo di dati da una tabella di database o quando si definiscono le relazioni nel designer del tipo di dati.
Annotazioni JPA Supportate
Appian supporta una vasta gamma di annotazioni JPA per la mappatura e la definizione del comportamento del database:
| Categoria | Annotazioni Supportate |
|---|---|
| Mappatura Base | @Table, @SecondaryTable, @SecondaryTables, @Column (con attributi a seconda dell’esigenza). |
| Chiavi | @Id, @GeneratedValue. |
| Relazioni | @JoinColumn, @JoinTable, @ManyToOne, @OneToOne, @OneToMany, @ManyToMany. |
| Ereditarietà/Override | @Inheritance, @PrimaryKeyJoinColumn, @MappedSuperclass, @AttributeOverride. |
| Altro | @Transient, @Version, @Basic, @Lob, @OrderBy, @UniqueConstraint, @SequenceGenerator. |
Le annotazioni più utili per la definizione di tabelle
In questo paragrafo facciamo una carrellata delle annotazioni strutturali che ritengo più utili per la modellazione delle tabelle. Le annotazioni JPA devono essere impostate prima di pubblicare il data store. Appian legge le annotazioni JPA solo quando crea una tabella o una colonna; le colonne esistenti non vengono mai aggiornate in base alle annotazioni JPA.
L’annotazione @Table, @Id
Possiamo utilizzare l’annotazione @Table per indicare il nome della tabella da utilizzare, bypassando le operazioni per limitare a 27 caratteri i nomi delle tabelle e colonne del database.
<xsd:annotation>
<xsd:appinfo source="appian.jpa">@Table(name="Persona")</xsd:appinfo>
</xsd:annotation>
Colgo l’occasione per fornirvi un piccolo tool per calcolare il nome generato da un nome che già supera i 27 caratteri.
Per indicare una colonna come chiave primaria possiamo usare l’annotazione @id e per abilitare l’auto increment possiamo usare @GeneratedValue
<xsd:element name="id" nillable="true" type="xsd:int">
<xsd:annotation>
<xsd:appinfo source="appian.jpa">@Id @GeneratedValue</xsd:appinfo>
</xsd:annotation>
</xsd:element>
Nota bene: se non esiste un campo id con chiave primaria, appian creerà una colonna a_id con tali caratteristiche .
le annotazioni @Lob e @Column
Quando lavoriamo con JPA, di solito i campi delle entità vengono mappati su colonne “normali” del database, come VARCHAR per le stringhe o INTEGER per i numeri. Questo funziona bene finché i dati hanno dimensioni contenute. Ma cosa succede se dobbiamo memorizzare un testo molto lungo, come un articolo, una descrizione dettagliata, oppure un file binario come un PDF o un’immagine? In questi casi, i tipi standard non bastano: il database ha bisogno di gestire i dati come Large Object, cioè oggetti di grandi dimensioni.
Ecco un esempio di lob:<xsd:element name="fileContent" nillable="true" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="appian.jpa">@Lob</xsd:appinfo>
</xsd:annotation>
</xsd:element>
Con questa configurazione, con un database MariaDB verrà creato un campo di tipo “LongText”, per ottenere un “MediumText” bisogna:
<xsd:element name="mediumtext" nillable="true" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="appian.jpa">@Column(columnDefinition="mediumtext")/xsd:appinfo>
</xsd:annotation>
</xsd:element>
Qui vediamo l’utilizzo per personalizzare l’annotazione @Column che permette di impostare anche il nome e la dimensione della colonna, ad esempio:
<xsd:element name="name" nillable="true" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="appian.jpa">@Column(length=200,name="NOME")</xsd:appinfo>
</xsd:annotation>
</xsd:element>
Questo ci permette di indicare la colonna sul database con nome “Nome” e lunghezza 200.
L’annotazione @Transient
L’annotazione @Transient è una delle annotazioni JPA (Java Persistence API) supportate da Appian per la definizione dei Custom Data Types (CDT).
Nel contesto dei CDT utilizzati per il mapping a un database relazionale tramite Data Stores, l’annotazione @Transient serve a specificare che un campo definito nell’XSD del CDT non deve essere persistito (memorizzato) nel database.
In sostanza, un campo marcato con @Transient fa parte della struttura dati logica (il CDT) all’interno di Appian, ma viene ignorato dal meccanismo di persistenza di Appian quando scrive o legge i dati dal database sottostante.
Questa annotazione è utile per i campi che contengono dati temporanei, calcolati, o informazioni che sono rilevanti solo all’interno del processo o dell’interfaccia di Appian, ma non devono avere una colonna corrispondente nella tabella del database.
Ecco un esempio: <xsd:element name="ignora" nillable="true" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="appian.jpa">@Transient</xsd:appinfo>
</xsd:annotation>
</xsd:element>
L’annotazione per il locking ottimistico: @Version
Abbiamo già visto questa annotazione quando abbiamo affrontato l’argomento delle strategie di locking da adottare alla scrittura di un record, ecco un esempio:
<xsd:element name="versionNumber" nillable="true" type="xsd:int">
<xsd:annotation>
<xsd:appinfo source="appian.jpa">@Version</xsd:appinfo>
</xsd:annotation>
</xsd:element>
Nota bene: il campo deve essere intero.
Conclusioni
I Custom Data Types di Appian, arricchiti dalle annotazioni JPA, offrono agli sviluppatori un modo semplice e potente per modellare i dati in un database. Con poche regole chiare – come l’uso di @Table per nominare le tabelle, @Id per definire la chiave primaria o @Lob per gestire testi e file di grandi dimensioni – è possibile rendere le applicazioni più flessibili e aderenti alle esigenze reali. Queste annotazioni permettono di impostare oculatamente le opzioni desiderate.
Riferimenti
https://docs.appian.com/suite/help/25.4/Supported_XSD_Elements_and_JPA_Annotations.html
https://docs.appian.com/suite/help/25.4/cdt_design_guidance.html










