Mysql 按EnumType.ORDINAL排序时,HQL在简单查询中返回重复的实体

Mysql 按EnumType.ORDINAL排序时,HQL在简单查询中返回重复的实体,mysql,hibernate,enums,hql,Mysql,Hibernate,Enums,Hql,我试图在SpringMVC中使用HibernateHQL获取实体列表。查询如下所示: SELECT m FROM MyEntity m where property =:property ORDER BY otherProperty desc @Entity @Table(name="my_entity") public class MyEntity extends BaseEntity<Long> { private static final long serialVe

我试图在SpringMVC中使用HibernateHQL获取实体列表。查询如下所示:

SELECT m FROM MyEntity m where property =:property ORDER BY otherProperty desc
@Entity
@Table(name="my_entity")
public class MyEntity extends BaseEntity<Long> {

    private static final long serialVersionUID = 4L;

    @Searchable
    @ManyToOne
    @JoinColumn(name = "property_id")
    private Property property;

    @Searchable
    @Column(name = "other_property")
    @Enumerated(EnumType.ORDINAL)
    private OtherProperty otherProperty;

    (...)
}
public enum OtherProperty { 
    VAL_A ("Hi"), 
    VAL_B ("Howdy"),
    VAL_C ("Aye");

    private String name;
    private OtherProperty(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }
}
问题是,即使在
SELECT
关键字之后添加
DISTINCT
关键字,我也会得到大量重复的结果(相同的ID和Java哈希)这种情况只发生在enum
OtherProperty
排序的地方,它在MySQL中存储为
ORDINAL
(int)。我尝试过使用标准和其他方法,总是发现这样的问题

这个问题有简单的解决办法吗?将枚举移动到枚举类型字符串是我想考虑的最后一个选项,因为它涉及重构数据库,但我想听听关于这一点的建议,如果这是您能想到的唯一选项。 MyEntity实体如下所示:

SELECT m FROM MyEntity m where property =:property ORDER BY otherProperty desc
@Entity
@Table(name="my_entity")
public class MyEntity extends BaseEntity<Long> {

    private static final long serialVersionUID = 4L;

    @Searchable
    @ManyToOne
    @JoinColumn(name = "property_id")
    private Property property;

    @Searchable
    @Column(name = "other_property")
    @Enumerated(EnumType.ORDINAL)
    private OtherProperty otherProperty;

    (...)
}
public enum OtherProperty { 
    VAL_A ("Hi"), 
    VAL_B ("Howdy"),
    VAL_C ("Aye");

    private String name;
    private OtherProperty(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }
}

好吧,这可能是我遇到的最愚蠢的问题(我的错)。我重写的
MyEntity
类中的
equals(Object o)
方法工作不正常,因此Java实际上无法区分一个实体和另一个实体。修复了那部分,修复了整个问题


因此,如果这对其他人有帮助,请检查您的
equals(Object o)
方法,如果您在HQL中获得了重复的方法。

尝试以下操作:query.setResultTransformer(CriteriaSpecification.DISTINCT\u ROOT\u ENTITY);对不起,我刚试过。与添加
distinct
sql子句一样,它仍然返回相同的重复项。我认为这是一个错误,因为SQL语句非常简单,没有连接,所以它应该只返回每一行一次。