1

我试图在 Telosys 中使用 dsl 模型生成 JPA 实体。

我的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="null",我该如何解决这个问题?

4

1 回答 1

1

这是在“DSL 模型”中的“反向侧”类型链接的情况下发生的错误。这个问题是由于 DSL 模型中没有外键定义造成的。外键已添加到新的 DSL 模型语法中,并将在 Telosys 的下一版本中使用(即将推出)。

"$jpa" 对象提供了一组用作编写快捷方式的函数,因此同时您还可以创建一个 Velocity 宏来用您自己的代码(纯 Velocity 语言)替换“linkAnnotations”函数。

例如一个名为“ jpaLinkAnnot ”的宏:

  1. 速度宏定义(带有 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
  1. 速度宏用法:
#foreach( $link in $entity.selectedLinks )
## Macro below replaces '$jpa.linkAnnotations(...)'
#jpaLinkAnnot($link)
    private ${link.formattedFieldType(10)} $link.formattedFieldName(12) ;

#end
于 2021-01-04T21:38:31.943 回答