hql在简单查询中返回重复的实体

bxpogfeg  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(330)

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

SELECT m FROM MyEntity m where property =:property ORDER BY otherProperty desc

问题是,即使在添加 DISTINCT 关键字后的 SELECT 一个。这只发生在按枚举排序的情况下 OtherProperty 存储为 ORDINAL (int)在mysql中。我试过使用标准和其他方法,总是发现这种问题。
这个问题有简单的解决办法吗?将enum移到enumtype.string是我想考虑的最后一个选项,因为它涉及到重构数据库,但是如果这是您能想到的唯一选项的话,我想听听您对此的建议。
myentity实体如下所示:

@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;

    (...)
}

baseentity类如下所示:

@MappedSuperclass
@SuppressWarnings("serial")
public abstract class BaseEntity<T> implements Serializable {

    @Id
    @Searchable
    @GeneratedValue(strategy = GenerationType.AUTO)
    private T id;

    @Version
    private Long version;

    public Long getVersion() {
        return version;
    }

    public void setVersion(Long version) {
        this.version = version;
    }

    public T getId() {
        return id;
    }

    public void setId(T id) {
        this.id = id;
    }
}

最后,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;
    }
}
ltqd579y

ltqd579y1#

好吧,这可能是我遇到的最愚蠢的问题(我的错)。我的 equals(Object o) 中的方法 MyEntity 我重写的类不能正常工作,所以java实际上无法区分一个实体和另一个实体。解决了那部分,解决了整个问题。
所以,万一这对其他人有帮助,请检查你的 equals(Object o) 方法,如果您在hql中获得重复的。

相关问题