Persistence DSL
The platform independent DSL “Persistence” defines module types, element types, member types and options that are used to define data structures. The DSL is named “Persistence”, but it is not necessary that the modeled data structure is going to be used to store data. Here you can see all defined types.
Module-Types | Element-Types | Member-Types |
---|---|---|
Persistence | entity (extends type) | none (only the inherited ones of “type”) |
Module-Types¶
Persistence¶
To be able to use the types and options you need to add “Persistence” to the module’s “kind” attribute.
Example:
...
module MyModule kind = Persistence;
...
Options for Module-Type “Persistence”
Option | Option-Type | Description |
---|---|---|
no options defined | - | - |
Element-Types¶
entity¶
An “entity” element is used to define a data structure. “entity” elements can have “field” members. A “field“‘s type can be a primitive type, an enumeration or another “entity” element.
Example:
entity Person {
field firstName : Text;
field lastName : Text;
field gender : Gender; // enumeration
field addresses : Address { // entity
set REST-HATEOAS = true;
set CollectionType = List;
set LazyLoading = true;
}
}
Options for Element-Type “entity”
Option | Option-Type | Description |
---|---|---|
Storable | Boolean | Defines, whether the entity’s data can be stored. |
UtilityFields | Boolean | Defines, whether a generator should automatically add default fields to the “entity”, fields that are needed anyway. With this a modeler’s work gets easier. Fields for creation and modification timestamps are examples for this. |
Nature | Enumerated, single valued | Possible value: Static, Transactional Defines, whether a data structure is meant to be used for data that almost never changes (Static) or for data that constantly changes and where there are data records added all the time (Transactional). This information can be used by generators to optimize application performance or to generate test code only for important data structures (the Transactional ones). |
Externalize | Boolean | Defines, whether it should be possible to convert the data in the data structure to a form that then can be used by other systems. |
Members and Member-Options for Element-Type “type”
More information on the member “field” can be found in the documentation of the DSL “Basic”.
Option | Option-Type | Description |
---|---|---|
Transient | Boolean | Defines, whether the data of the “field” should be stored or not. |
Id | Boolean | Defines, whether the “field” is going to be used to uniquely identify a data record. |
Length | Numeric | Defines the maximum size of the “field“‘s value. |
MinimumLength | Numeric | Defines the minimum size of the “field“‘s value (e.g for a password field). |
Unique | Boolean | Defines, whether all of the “field” values of all data records should be unique. |
Mandatory | Boolean | Defines, whether there must be a value set for the “field”. |
PrivatelyOwned | Boolean | Defines, whether all “entity” elements that are held in the value of the “field” cannot be used anywhere else (PrivatelyOwned=true). A consequence PrivatelyOwned=true is, that when the “entity” that owns the “field” is going to be deleted, all owned “entity” values of the “field” are deleted as well. |
EnumerationType | Enumerated, single valued | Possible value: Ordinal, Literal Defines, whether the value of an “enumeration” is going to be stored as number (Ordinal) or as text (Literal). |
Binary | Boolean | Defines, whether the “field” data is going to be stored in binary format (e.g. as BLOB) |
LazyLoading | Boolean | Defines, whether the data records represented by the “entity” are going to be loaded from a persistent storage onlay when the “field” is accessed for the very first time (LazyLoading=true). |
CascadeTypes | Enumerated, multi valued | Possible values: All, None, Persist, Merge, Refresh, Remove Defines, what the generated software shall do with “entity” values that are held in the “field” once the “entity” is stored as a new data record (Persist)
|
OrderBy | Reference, multi valued | References one or more “fields” of the “entity” that serves as the “field” type. Those referenced fields determine the order of the data records when they are read from a persistent storage. |
RelatesTo | Refrence, single valued | References a “field” of another “entity”, whose type is the “entity” that owns the “field” where the “RelatesTo” is defined for. This reference links to fields together and defines a bi-directional relationship between the two owning “entities”. |