首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Telosys生成带有链接的记录

如何使用Telosys生成带有链接的记录
EN

Stack Overflow用户
提问于 2022-05-20 21:10:51
回答 1查看 119关注 0票数 1

我使用Telosys模板为数据实体生成代码。我使用模板,可以生成具有链接的实体类,即与其他实体的关系。但是,生成的DTO记录没有正确地映射链接,即在实体类中,如果存在来自getter的ManytoOne关系和集合作为返回类型,则在DTO记录中没有反映相同的链接。

在现有的记录模板中是否有其他可用的模板或应该做的任何更改?

感谢你的帮助。

问题第2部分基于@Igu的评论,我生成了这样的实体:

代码语言:javascript
复制
//--- ENTITY LINKS ( RELATIONSHIP )
@OneToMany(fetch = FetchType.EAGER, mappedBy="mcophy", targetEntity=Pgnphy.class)
private Collection<Pgnphy> listOfPgnphy ; 

@OneToMany(fetch = FetchType.EAGER, mappedBy="mcophy", targetEntity=Pgaphy.class)
private Collection<Pgaphy> listOfPgaphy ; 

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="aiawtx", referencedColumnName="afawtx", insertable=false, updatable=false)
private Stnphy     stnphy ; 

和预期的一样。然而,当我生成我的DTO时,它们是这样的:

代码语言:javascript
复制
//----------------------------------------------------------------------
// ENTITY LINKS ( RELATIONSHIP )
//----------------------------------------------------------------------
private List<PgaphyDTO> listOfPgaphy ;
private Stnphy stnphy       ;
private List<PgnphyDTO> listOfPgnphy ;

我以为第二个链接是这样的:

代码语言:javascript
复制
private StnphyDTO stnphyDTO;

我用过

代码语言:javascript
复制
private ${link.formattedFieldType(10).trim().replace(">","DTO>")} $link.formattedFieldName(12) ;

我做错什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-01 17:07:07

实际上,在这组模板中,DTO中没有任何关系。

如果您想要一个带有链接的基本Java示例,可以尝试这个包:

https://github.com/telosys-templates-v3/java-domain-T300

(见模板"domain_entity_java.vm“)

补充:

要将链接类型(例如"List< Book >“转换为"List< BookDTO >”),可以使用“替换”方法(Java中类字符串的方法)将char ">“替换为"DTO>”。

例:私有${link.formattedFieldType(10).replace(">","DTO>")}

=====关于第二个问题

对于字段类型,如果链接不是集合,则只需在末尾添加"DTO“(因为没有">",所以没有什么可替换的)。

对于字段名,我不确定更改内部字段名是否真的有用。但是,如果您真的想这样做,只需在字段名( ${link.fieldName} )的末尾添加"DTO“字符串即可。

示例:

在类级别(字段类型和字段名):

代码语言:javascript
复制
#if ($link.isCardinalityToMany() )  
   private ${link.fieldType.replace(">","DTO>")} ${link.fieldName}DTO ;
#else 
   private ${link.fieldType}DTO ${link.fieldName}DTO ;
#end

在setter中(仅字段名):

代码语言:javascript
复制
this.${link.fieldName}DTO = setterArgument;

在getter中(仅字段名):

代码语言:javascript
复制
return this.${link.fieldName}DTO;

=====关于第三个问题生成的文件名

在描述所有目标的"templates.cfg“文件中,只需在"${BEANNAME}”(目标行的第二个值)末尾添加一个后缀即可。

示例:

代码语言:javascript
复制
your-label ; ${BEANNAME}DTO.java  ; your-dest-folder  ; your-template.vm

如果您需要非常特殊的转换来构建一个复杂的目标文件名,您也可以在模板文件(.vm文件)中这样做,并通过使用"$target"对象强制执行目标(参见https://www.telosys.org/doc/v400/objects/target.html )。

它将强制使用"templates.cfg“中的BEANNAME变量。

示例:

代码语言:javascript
复制
#set( $newName = "${fn.uncapitalize($entity.name)}Foo" )  
$target.forceEntityName($newName)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72324811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档