我正在尝试扩展https://github.com/tennaito/rsql-jpa库以支持EnumSet字段。
如果我对ArgumentParser进行硬编码以将EnumSet属性值转换为特定查询,那么我就可以对数据库进行实际查询。
我的问题是,给定查询enumsetfield=IN=(enumvalue)
,ArgumentParser会得到JavaType:class java.util.EnumSet
和字符串enumvalue。
如何从JavaType获取元素类型?我还可以访问org.hibernate.jpa.criteria.path.SingularAttributePath
(如果可能包含elementType)。
答案 0 :(得分:0)
我最终在SingularAttributePath:path.attribute.member.signature
上找到了所需的信息,其格式为:Ljava/util/EnumSet<Lmy.project.enum;>;
-这不是最佳选择,我不得不重写很多rsql-jpa,我结束了意识到,对于比较两个集合,IN查询几乎没有意义。现在查询为enumsetfield==enumvalue
答案 1 :(得分:0)
您也许可以使用反射来获取存储元素类的EnumSet
类中的非公共字段。例如,对于OpenJDK 8,here是EnumSet
的源代码,元素类的字段称为elementType
。但是,这将是特定于您的类库实现的实现,而不是可移植的。