Hibernate 插入键定义为EmbeddedBleid的实体的SELECT
我有以下实体,其主键定义为Hibernate 插入键定义为EmbeddedBleid的实体的SELECT,hibernate,hql,jpql,Hibernate,Hql,Jpql,我有以下实体,其主键定义为@embeddedableid @Entity public class TeamResult implements Serializable { @EmbeddedId private TeamMatchdayKey primaryKey; @Column(nullable = false) private long matchdayResult; @Column(nullable = false) private
@embeddedableid
@Entity
public class TeamResult implements Serializable {
@EmbeddedId
private TeamMatchdayKey primaryKey;
@Column(nullable = false)
private long matchdayResult;
@Column(nullable = false)
private long afterMatchdayResult;
// ...
}
embedded
classTeamMatchdayKey
如下所示
@Embeddable
public class TeamMatchdayKey implements Serializable {
@ManyToOne(optional = false)
@PrimaryKeyJoinColumn
private Team team;
@ManyToOne(optional = false)
@PrimaryKeyJoinColumn
private Matchday matchday;
//...
}
以下HQL查询中使用的团队
实体的相关部分如下所示
@Entity
public final class Team implements Serializable {
@Id
@Column(length = 40)
private String name = "";
// ...
@OneToMany(mappedBy="primaryKey.team", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@MapKey(name = "primaryKey.matchday")
@OrderBy("primaryKey.matchday")
private SortedMap<Matchday, TeamResult> teamResults = new TreeMap<>();
// ...
}
…然而,它似乎是不正确的,因为它在启动web应用程序时的编译给了我以下异常
org.hibernate.QueryException: could not resolve property: of: com.example.entities.stats.TeamResult
正如您所看到的,错误消息中没有属性名称,因此我尝试了以下方法
INSERT INTO TeamResult (team, matchday, matchdayResult, afterMatchdayResult)
SELECT t.team, (SELECT MAX(m) from Matchday m), 0, COALESCE(tr.afterMatchdayResult, 0)
FROM Team t JOIN t.teamResults tr
WHERE tr IS EMPTY OR KEY(tr).matchdayNumber = (SELECT MAX(matchdaynumber) - 1 FROM Matchday) ORDER BY tr.afterMatchdayResult DESC, t
。。。然而,这给了我以下信息
org.hibernate.QueryException: could not resolve property: team of: com.example.entities.stats.TeamResult
这条消息对我来说是可以理解的,因为我知道没有team
属性,但它隐藏在我的嵌入式数据库中
有没有办法定义
INSERT。。。选择HQL/JPQL中的
query,查询主键定义为@embeddedableid
?的实体。您需要按照OOP的方式引用这些属性,就像这样primaryKey.team
@chsdk,但这是我首先要做的。请仔细阅读问题。你能用SELECT
部分发布整个查询吗*@chsdk:给你,但我认为问题不在这里,因为这显然是关于插入TeamResult(
)之后的第一个属性。你也可以发布团队实体的相关部分吗?
org.hibernate.QueryException: could not resolve property: team of: com.example.entities.stats.TeamResult