在生成的 hyperjaxb3 中使用完全限定名称 java 类
use fully qualified names in hyperjaxb3 generated java classes
我已经从 hyperjax3 中生成了 .java classes,它们已经用 @Entity 和 @Table 等注释进行了注释.."
在@Entity 中自动添加 class 名称,如下所示:
@Entity(name = "MyClassName")
但我希望此名称字段具有 完全限定的 class 名称 as
@Entity(name = "myPackage.here.MyClassName")
我正在使用
hyperjaxb3-ejb-samples-po-initial-0.5.6 例子
并通过 运行 mvn clean install 生成带注释的 java classes,其中存在我的 XSD 模式在 Maven 项目的 src\main\resources
文件夹中。
*我已经搜索并找到了一种方法,它指出 使用自动导入=false 但我无法合并它,因为我只是 运行 Maven 项目。
免责声明:我是Hyperjaxb3的作者。
实体名称不可自定义,但您可以实施自己的命名策略以生成完全限定的实体名称。
为此,您必须实现 org.jvnet.hyperjaxb3.ejb.strategy.naming.Naming
接口。最简单的方法是继承 org.jvnet.hyperjaxb3.ejb.strategy.naming.impl.DefaultNaming
并覆盖 getEntityName
方法:
public String getEntityName(Mapping context, Outline outline, NType type) {
final JType theType = type.toType(outline, Aspect.EXPOSED);
assert theType instanceof JClass;
final JClass theClass = (JClass) theType;
return CodeModelUtils.getPackagedClassName(theClass);
}
您还必须包含 org\jvnet\hyperjaxb3\ejb\plugin\custom\applicationContext.xml
资源以配置您的自定义命名策略:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean name="naming" class="com.acme.foo.CustomNaming">
<property name="reservedNames" ref="reservedNames"/>
</bean>
</beans>
最后,编译所有内容,打包为 JAR 并添加到 HJ3 类路径,例如通过 Maven POM 中的插件依赖项:
<plugin>
<groupId>org.jvnet.hyperjaxb3</groupId>
<artifactId>maven-hyperjaxb3-plugin</artifactId>
<configuration>...</configuration>
<dependencies>
<dependency>
<groupId>com.acme.foo</groupId>
<artifactId>hyperjaxb3-custom-naming-extension</artifactId>
<version>...</version>
</dependency>
</dependencies>
</plugin>
这是一个 implements/configures 自定义命名策略的测试项目:
另请参阅:
- Hyperjaxb3 naming strategy configuration
- http://confluence.highsource.org/display/HJ3/Customization+Guide(服务器好像挂了)
我已经从 hyperjax3 中生成了 .java classes,它们已经用 @Entity 和 @Table 等注释进行了注释.."
在@Entity 中自动添加 class 名称,如下所示:
@Entity(name = "MyClassName")
但我希望此名称字段具有 完全限定的 class 名称 as
@Entity(name = "myPackage.here.MyClassName")
我正在使用
hyperjaxb3-ejb-samples-po-initial-0.5.6 例子
并通过 运行 mvn clean install 生成带注释的 java classes,其中存在我的 XSD 模式在 Maven 项目的 src\main\resources
文件夹中。
*我已经搜索并找到了一种方法,它指出 使用自动导入=false 但我无法合并它,因为我只是 运行 Maven 项目。
免责声明:我是Hyperjaxb3的作者。
实体名称不可自定义,但您可以实施自己的命名策略以生成完全限定的实体名称。
为此,您必须实现 org.jvnet.hyperjaxb3.ejb.strategy.naming.Naming
接口。最简单的方法是继承 org.jvnet.hyperjaxb3.ejb.strategy.naming.impl.DefaultNaming
并覆盖 getEntityName
方法:
public String getEntityName(Mapping context, Outline outline, NType type) {
final JType theType = type.toType(outline, Aspect.EXPOSED);
assert theType instanceof JClass;
final JClass theClass = (JClass) theType;
return CodeModelUtils.getPackagedClassName(theClass);
}
您还必须包含 org\jvnet\hyperjaxb3\ejb\plugin\custom\applicationContext.xml
资源以配置您的自定义命名策略:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean name="naming" class="com.acme.foo.CustomNaming">
<property name="reservedNames" ref="reservedNames"/>
</bean>
</beans>
最后,编译所有内容,打包为 JAR 并添加到 HJ3 类路径,例如通过 Maven POM 中的插件依赖项:
<plugin>
<groupId>org.jvnet.hyperjaxb3</groupId>
<artifactId>maven-hyperjaxb3-plugin</artifactId>
<configuration>...</configuration>
<dependencies>
<dependency>
<groupId>com.acme.foo</groupId>
<artifactId>hyperjaxb3-custom-naming-extension</artifactId>
<version>...</version>
</dependency>
</dependencies>
</plugin>
这是一个 implements/configures 自定义命名策略的测试项目:
另请参阅:
- Hyperjaxb3 naming strategy configuration
- http://confluence.highsource.org/display/HJ3/Customization+Guide(服务器好像挂了)