我正在尝试在querydsl元数据导出器中注册我的自定义类型。
我有这样的枚举:
public enum RoleName {
ADMIN, USER;
}
然后,我为querydsl创建了自定义类型:
public class RoleNameType extends EnumByNameType<RoleName> {
public RoleNameType(Class<RoleName> type) {
super(type);
}
}
我在pom.xml中的querydsl插件设置:
<plugin>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-maven-plugin</artifactId>
<version>4.2.1</version>
<executions>
<execution>
<goals>
<goal>export</goal>
</goals>
</execution>
</executions>
<configuration>
<jdbcDriver>oracle.jdbc.driver.OracleDriver</jdbcDriver>
<jdbcUrl>jdbc:oracle:thin:@localhost:1521:xe</jdbcUrl>
<jdbcUser>user</jdbcUser>
<jdbcPassword>pass</jdbcPassword>
<packageName>com.example</packageName>
<targetFolder>target/generated-sources/java</targetFolder>
<namePrefix>BLANK</namePrefix>
<schemaPattern>TASK_MANAGER_USER</schemaPattern>
<customTypes>
<customType>com.example.RoleNameType</customType>
</customTypes>
<typeMappings>
<typeMapping>
<table>TM_ROLE</table>
<column>ROLE_NAME</column>
<type>com.example.RoleName</type>
</typeMapping>
</typeMappings>
<numericMappings>
<numericMapping>
<total>1</total>
<decimal>0</decimal>
<javaType>java.lang.Boolean</javaType>
</numericMapping>
</numericMappings>
</configuration>
<dependencies>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.5</version>
</dependency>
</dependencies>
</plugin>
在构建异常期间返回: “原因:java.lang.ClassNotFoundException:com.example.RoleNameType”
我已经检查过软件包或类名中没有错字。 有什么想法如何与我的自定义枚举一起使用querydsl元数据导出器吗?
答案 0 :(得分:2)
这并不是真正解决您的问题的方法,但也许可以帮助其他人更快地得出结论:
我想做的事情与您描述的一样,但都以相同的方式失败了。经过一段时间的浏览和浏览,我遇到了querydsl Github项目的问题#1865。 @timowest的回复指出,项目的源代码不属于插件的类路径的一部分。因此,导出器无法找到导致ClassNotFoundException的类型映射中指定的类。
他还指出,项目的依赖项在类路径中可用。我想,我尝试一下,然后提取枚举,将它们放在项目中的单独模块中。新模块作为对我的原始模块的依赖关系添加。不幸的是,结果是一样的:尽管抛出了ClassNotFoundException,但是enum模块出现在类路径中,用于检查Maven的调试输出。
@timowest在2016年对此问题做出了回应,并已解决该问题。我没有发现任何迹象表明它实际上已经解决。因此,我认为,没有简单的解决方案。无论如何,该项目似乎从一年以来就一直处于闲置状态。