我试图在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;
}
}
1条答案
按热度按时间ltqd579y1#
好吧,这可能是我遇到的最愚蠢的问题(我的错)。我的
equals(Object o)
中的方法MyEntity
我重写的类不能正常工作,所以java实际上无法区分一个实体和另一个实体。解决了那部分,解决了整个问题。所以,万一这对其他人有帮助,请检查你的
equals(Object o)
方法,如果您在hql中获得重复的。