如何从带有字段级别注释的表中生成休眠域类?我使用了 Hibernate Tools 项目并从数据库中的表中生成了域类。生成的类在 getter 方法上而不是在字段级别上具有注释。请建议一种生成具有注释字段的域类的方法。eclipse/IDEA 等中是否有任何重构工具可用于将注释从方法级别移动到字段级别?
感谢您的帮助和时间。
如何从带有字段级别注释的表中生成休眠域类?我使用了 Hibernate Tools 项目并从数据库中的表中生成了域类。生成的类在 getter 方法上而不是在字段级别上具有注释。请建议一种生成具有注释字段的域类的方法。eclipse/IDEA 等中是否有任何重构工具可用于将注释从方法级别移动到字段级别?
感谢您的帮助和时间。
以下是步骤:
通过在 eclipse 文件夹中执行搜索来分配“hibernate-tools.jar” 例如,您将在
C:\eclipse\plugins\org.hibernate.eclipse_3.4.1.xxx\lib\tools
解压到一个临时文件夹(WinRar 可以这样做) 例如,解压到[Your Project]\template
在 [Your Project]\template\pojo 文件夹下,创建一个名为“Ejb3FieldGetAnnotation.ftl”的文件
该文件实际上是“Ejb3PropertyGetAnnotation.ftl”的副本,但所有单词“property”都被“field”替换,因为该文件将放置在遍历所有字段(而不是属性)的循环中。我在这篇文章中包含了文件的内容
删除属性级注释:在文件“PojoPropertyAccessors.ftl”中,删除或注释掉
<#include "GetPropertyAnnotation.ftl"/>
添加字段级注释:在文件“PojoFields.ftl”中,添加
<#include "Ejb3FieldGetAnnotation.ftl"/>
${pojo.getFieldModifiers(field)} ...
生成 Java 实体时,选择“使用自定义模板”并指定模板文件夹。在这种情况下,它将是 [Your Project]\template
==================================================================================
Ejb3FieldGetAnnotation.ftl
==================================================================================
<#if ejb3>
<#if pojo.hasIdentifierProperty()>
<#if field.equals(clazz.identifierProperty)>
${pojo.generateAnnIdGenerator()}
<#-- if this is the id property (getter)-->
<#-- explicitly set the column name for this property-->
</#if>
</#if>
<#if c2h.isOneToOne(field)>
${pojo.generateOneToOneAnnotation(field, cfg)}
<#elseif c2h.isManyToOne(field)>
${pojo.generateManyToOneAnnotation(field)}
<#--TODO support optional and targetEntity-->
${pojo.generateJoinColumnsAnnotation(field, cfg)}
<#elseif c2h.isCollection(field)>
${pojo.generateCollectionAnnotation(field, cfg)}
<#else>
${pojo.generateBasicAnnotation(field)}
${pojo.generateAnnColumnAnnotation(field)}
</#if>
</#if>
希望它对你有用。
我花了很多时间阅读 5 年前的答案,却不了解如何去做(尤其是如果您在 Intellij 而不是 Eclipse 中工作)以及为什么还没有解决这个问题。所以我找到了,就在这里,而且很简单:
在 Intellij 中:
orm.xml
在与您相同的文件夹中创建一个文件persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
version="2.0">
<persistence-unit-metadata>
<persistence-unit-defaults>
<access>FIELD</access>
</persistence-unit-defaults>
</persistence-unit-metadata>
</entity-mappings>
您的实体将具有字段注释!
@Entity
@Table(name = "user", schema = "public", catalog = "my_db")
public class User {
@Id
@Column(name = "id")
private Integer id;
...
}
目前有必要使用自定义模板。这里有更多的参考和例子来实现这个: https ://forum.hibernate.org/viewtopic.php?f=6&t=1003858&p=2429868#p2429868