使用嵌套接口中的值作为参数进行查询

时间:2018-07-16 13:35:33

标签: java hibernate jpa

我已经阅读了很多有关在查询中使用枚举作为参数的信息。我的项目中有一些查询,使用这些枚举中的值作为参数。

例如:

public enum YesNo {
Y, N
}

查询:

select ent 
from 
       Entity ent 
where
       ent.id = :id
       and ent.deleted = project.path.example.YesNo.N

实体:

@Entity
public class Entity{
Long id;
@Enumerated(EnumType.STRING)
YesNo deleted;
}

上述正常运行

但是,当我有以下内容时:

interface Commons{
    interface MostCommonTypesofAnimals {
        long DOG = 1L;
        long CAT = 2L;
    }
}

查询

select a 
from 
       Animal a 
where
       a.id = :id
       and a.type = project.path.example.Commons.MostCommonTypesofAnimals.DOG

实体

@Entity
public class Animal{
Long id;
Type type;
}

@Entity
public class Type{
public Long id;
}

即使实际上是正确的,也不能告诉我该路径不正确。

有什么解决方法吗?还是无法映射接口值?谁能给我一个可行的例子?我找不到类似的东西。

请注意,这仅是说明情况的示例。这些不是我使用的真实姓名或任何其他内容。

1 个答案:

答案 0 :(得分:1)

要在使用hibernate / jpa(基于标签)时使用枚举,应在Pojo类中使用注释。

@Enumerated(EnumType.ORDINAL)

在您的示例中,类似:

@Entity
@Table(name = "tableName")
public class entityName {
    @Enumerated(EnumType.ORDINAL)
    private YesNo yesNoEnum;
}

您可以根据需要将注释放在此处或在吸气剂中。

您可以找到更多信息here

ps:是或否,建议您使用布尔值,而不是枚举