我使用Telosys模板为数据实体生成代码。我使用模板,可以生成具有链接的实体类,即与其他实体的关系。但是,生成的DTO记录没有正确地映射链接,即在实体类中,如果存在来自getter的ManytoOne关系和集合作为返回类型,则在DTO记录中没有反映相同的链接。
在现有的记录模板中是否有其他可用的模板或应该做的任何更改?
感谢你的帮助。
问题第2部分基于@Igu的评论,我生成了这样的实体:
//--- 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时,它们是这样的:
//----------------------------------------------------------------------
// ENTITY LINKS ( RELATIONSHIP )
//----------------------------------------------------------------------
private List<PgaphyDTO> listOfPgaphy ;
private Stnphy stnphy ;
private List<PgnphyDTO> listOfPgnphy ;我以为第二个链接是这样的:
private StnphyDTO stnphyDTO;我用过
private ${link.formattedFieldType(10).trim().replace(">","DTO>")} $link.formattedFieldName(12) ;我做错什么了?
发布于 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“字符串即可。
示例:
在类级别(字段类型和字段名):
#if ($link.isCardinalityToMany() )
private ${link.fieldType.replace(">","DTO>")} ${link.fieldName}DTO ;
#else
private ${link.fieldType}DTO ${link.fieldName}DTO ;
#end在setter中(仅字段名):
this.${link.fieldName}DTO = setterArgument;在getter中(仅字段名):
return this.${link.fieldName}DTO;=====关于第三个问题生成的文件名
在描述所有目标的"templates.cfg“文件中,只需在"${BEANNAME}”(目标行的第二个值)末尾添加一个后缀即可。
示例:
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变量。
示例:
#set( $newName = "${fn.uncapitalize($entity.name)}Foo" )
$target.forceEntityName($newName)https://stackoverflow.com/questions/72324811
复制相似问题