我试图在Telosys中使用dsl模型生成JPA enitites。
我的Dsl型号:
Car {
id : int { @Id, @AutoIncremented };
user : Employee;
}
Employee {
id : long { @Id } ;
name : string ;
cars : Car[] ;
}
我使用这个代码:
$jpa.linkAnnotations(4, $link, $entity.nonKeyAttributes)
private ${link.fieldType} $link.fieldName ;
#end
我总是有这样的结果:
@OneToMany(mappedBy="null", targetEntity=Car.class)
private List<Car> cars ;
@ManyToOne
private Employee user ;
我的问题是,我总是得到mappedBy=";空";,我该怎么解决这个问题?
这是一个在"反面";类型链接;DSL模型";。这个问题是由DSL模型中缺少外键定义引起的。外键已添加到新的DSL模型语法中,并将在Telosys的下一个版本中可用(不久将合并(。
"$jpa";对象提供了一组用作书写快捷方式的函数,因此在此期间,您还可以创建一个Velocity宏来替换";链接注释";函数(纯Velocity语言(。
例如,一个名为">jpaLinkAnnot":
- 速度宏定义(具有1个参数"$link"(:
#macro( jpaLinkAnnot $link)
#if ( $link.isOwningSide() )
// Owning Side
$jpa.linkAnnotations(4, $link, $entity.nonKeyAttributes)
#else
// Inverse Side
#if ( $link.isCardinalityOneToMany() )
@OneToMany(targetEntity=${link.targetEntity.name}.class )
#else
$jpa.linkAnnotations(4, $link, $entity.nonKeyAttributes)
#end
#end
#end
- Velocity宏用法:
#foreach( $link in $entity.selectedLinks )
## Macro below replaces '$jpa.linkAnnotations(...)'
#jpaLinkAnnot($link)
private ${link.formattedFieldType(10)} $link.formattedFieldName(12) ;
#end