Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以在QueryDSL查询中使用枚举方法_Java_Jpa_Enums_Querydsl - Fatal编程技术网

Java 是否可以在QueryDSL查询中使用枚举方法

Java 是否可以在QueryDSL查询中使用枚举方法,java,jpa,enums,querydsl,Java,Jpa,Enums,Querydsl,我有一个包含枚举字段的实体类型。 我使用JPA2.1 AttributeConverter将枚举实例/值映射到数据库列。 枚举值包含我希望在QueryDSL查询中使用的其他信息,就好像这些信息将存储在数据库中一样 例如: 包含消息类型的消息实体。该类型是枚举值。枚举确定消息是否为全局消息。在数据库中,枚举表示为int值。是否全局的信息是枚举的一部分 有可能写这样的东西吗 导入静态com.example.QMessage.message; @存储库 公共类MessageDao{ @持久上下文 受保

我有一个包含枚举字段的实体类型。 我使用JPA2.1 AttributeConverter将枚举实例/值映射到数据库列。 枚举值包含我希望在QueryDSL查询中使用的其他信息,就好像这些信息将存储在数据库中一样

例如: 包含消息类型的消息实体。该类型是枚举值。枚举确定消息是否为全局消息。在数据库中,枚举表示为int值。是否全局的信息是枚举的一部分

有可能写这样的东西吗

导入静态com.example.QMessage.message;
@存储库
公共类MessageDao{
@持久上下文
受保护的实体管理器em;
公共列表getGlobalMessages(){
返回新的JPAQuery(em)
.发自(留言)
.where(message.messageType.global.isTrue())
.列表(信息);
}
}
查询应仅返回消息类型为
global==true
的消息。但是生成的
QMessage
类不提供该功能
message.messageType
提供了一个
EnumPath
,不可能调用enum的函数

枚举

公共枚举消息类型{
欢迎(0,正确),
提醒(1),
重要(0,正确);
私有最终int id;
私有最终布尔全局;
私有消息类型(int-id){
此(id,假);
}
私有消息类型(int-id,布尔全局){
this.id=id;
this.global=global;
}
公共int getId(){
返回此.id;
}
公共布尔值isGlobal(){
返回此.global;
}
}
实体

@实体
公共类消息{
@身份证
私有长消息ID;
@列(name=“MESSAGE”)
私有字符串消息;
@列(name=“消息类型”)
私有消息类型消息类型;
//接二连三
// ... 
}
转换器

@转换器(autoApply=true)
公共类MessageTypeConverter实现AttributeConverter{
@凌驾
公共整数convertToDatabaseColumn(MessageType MessageType){
返回messageType.getId();
}
@凌驾
公共区域设置convertToEntityAttribute(整型dbValue){
对于(MessageType:values()){
if(type.getId()==dbValue){
返回类型;
}
}
抛出新的IllegalArgumentException(“未知id”);
}
}

一个可能的解决方案/解决方法是在枚举类型中创建一个静态方法,该方法返回匹配枚举值的集合(
global==true
):

返回新的JPAQuery(em)
.发自(留言)
.where(message.messageType.in(messageType.getGlobalMessageTypes())
.列表(信息);

枚举在JPA中被视为值/文字类型,因此没有干净的方法通过属性/方法引用来处理它