diff --git a/pom.xml b/pom.xml
index e8b35ba..736396b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
dev.gump
worm
- 1.1.4
+ 1.1.7
diff --git a/src/main/java/dev/gump/worm/field/FieldType.java b/src/main/java/dev/gump/worm/field/FieldType.java
index c443fe5..55f24d7 100644
--- a/src/main/java/dev/gump/worm/field/FieldType.java
+++ b/src/main/java/dev/gump/worm/field/FieldType.java
@@ -2,6 +2,7 @@
import dev.gump.worm.entity.Entity;
+import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
@@ -21,7 +22,8 @@ public enum FieldType {
TIME("TIME", List.of(), true),
TIMESTAMP("TIMESTAMP", List.of(), true),
BOOL("BOOL", List.of(Boolean.class)),
- ENTITY("ENTITY",List.of(Entity.class), true);
+ ENTITY("ENTITY",List.of(Entity.class), true),
+ DECIMAL("DECIMAL(19,2)", List.of(BigDecimal.class), true);
private final String value;
private final List> classes;
private final boolean needAsps;
diff --git a/src/main/java/dev/gump/worm/field/WormField.java b/src/main/java/dev/gump/worm/field/WormField.java
index bfdbd65..d79e1cf 100644
--- a/src/main/java/dev/gump/worm/field/WormField.java
+++ b/src/main/java/dev/gump/worm/field/WormField.java
@@ -103,16 +103,29 @@ public String getEntityId(Object obj) throws IllegalAccessException, NoSuchField
public String getSqlCreation(){
if(type == FieldType.ENTITY && fieldClass_relational != null){
EntityMeta cMeta = Worm.getRegistry().getTableMeta(fieldClass_relational);
- if(cMeta.getUniqueKeyColumns().size() != 1)
+ if (cMeta.getUniqueKeyColumns().size() != 1)
throw new WormException("Relational Worm tables need to have only one unique keys");
+
WormField key = cMeta.getUniqueKeyColumns().toArray(WormField[]::new)[0];
- StringBuilder sql = new StringBuilder(key.getSqlCreation());
- sql.append(", CONSTRAINT FK_").append(getName()).append("_").append(cMeta.getName()).append(" FOREIGN KEY (").append(getName()).append(") REFERENCES ")
+
+ StringBuilder sql = new StringBuilder();
+ sql.append(key.getType().getValue());
+ if (key.getLength() > 0)
+ sql.append('(').append(key.getLength()).append(')');
+
+ if (!nullable)
+ sql.append(" NOT NULL");
+
+ sql.append(", CONSTRAINT FK_").append(getName()).append("_").append(cMeta.getName())
+ .append(" FOREIGN KEY (").append(getName()).append(") REFERENCES ")
.append(cMeta.getName()).append(" (").append(key.getName()).append(")");
- if(onDelete != null)
- sql.append(" ON DELETE ").append(onDelete.getValue());
- if(onUpdate != null)
- sql.append(" ON UPDATE ").append(onUpdate.getValue());
+
+ if (onDelete != null)
+ sql.append(" ON DELETE ").append(onDelete.name());
+
+ if (onUpdate != null)
+ sql.append(" ON UPDATE ").append(onUpdate.name());
+
return sql.toString();
}