我有实体Alpha,并且在其中:
@OneToMany(mappedBy = "alpha")
@OrderBy("attributeName ASC")
@Sort(type = SortType.NATURAL)
private SortedSet<Beta> sortedSet = new TreeSet<Beta>();
实体Beta继承自实体Gamma。 Gamma将“attributeName”作为属性。
如果我使用Beta的属性,可以正常工作。但是当我使用继承属性时,hibernate会尝试在Beta类中查找attributeName属性,实际上该属性不存在。
遵循例外:
could not initialize a collection: [...sortedSet]
...
Caused by: org.hibernate.exception.SQLGrammarException: could not initialize a collection: [...sortedSet]
...
Caused by: java.sql.SQLSyntaxErrorException: ORA-00904: "GAMA"."GAMA_NM_ATT": invalid identifier
EDIT1: Alpha,Beta和Gama是我数据库中的表格。
我不能在Gama中使用@MappedSuperClass,因为它是一个表。
简要的实体声明:
@Entity
@Table(name = "GAMA")
@SequenceGenerator(name = "SQ_GAM_CD_GAMA", sequenceName = "SQ_GAM_CD_GAMA")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Gama implements IEntity<Long> {
@Column(name = "GAM_NM_ATT", nullable = false, length = 260)
public String getAttributeName() {
return this.attributeName;
}
...
}
@Entity
@Table(name = "BETA")
public class Beta extends Gama implements Comparable<Beta> {
@ManyToOne
@JoinColumn(name = "BET_CD_BETA", nullable = false)
public Alpha getAlpha() {
return alpha;
}
...
}
@Entity
@Table(name = "ALPHA")
@SequenceGenerator(name = "SQ_ALP_CD_ALPHA", sequenceName = "SQ_ALP_CD_ALPHA")
public class Alpha implements IEntity<Long> {
@OneToMany(mappedBy = "alpha")
@Sort(type = SortType.NATURAL)
@Orderby("attributeName ASC") //<------------ **PROBLEM**
private SortedSet<Beta> betaSortedSet = new TreeSet<Beta>();
答案 0 :(得分:0)
好问题。
我认为您可以尝试使用@Formula
。
例如:
在Beta
中添加一个使用@Formula("GAM_NM_ATT")
注释的新属性,并在@Orderby
上使用此属性。
在这种情况下,它的作用是因为列不明确。
干杯。