我一直在尝试使用HQL子查询检索相关实体时遇到问题。我有三个实体:Customer
实体,Account
实体和我称为Relation
的其他实体。最初我在Customer
和Account
之间存在多对多关系,但后来我不得不添加这个名为Relation
的新实体,因为我需要在{{1}之间的关系中添加其他信息}和Customer
。由于Account
不再映射到问题中的任何其他类,我将把它遗漏掉。
@Entity(name =“Address”)
@Table(name =“Address”)
公共类地址延伸{
.....
@OneToMany(fetch = FetchType.LAZY,mappedBy =“address”,
orphanRemoval = true)
private Set relations = new HashSet();
@柱() private String number = null;
.....
}
@Entity(name =“Relation”)
@Table(name =“CustomerAccount”)
@IdClass(Relation.RelationId.class)
公共阶层关系{
....
@Id
@ManyToOne(fetch = FetchType.LAZY)
私人帐户帐户= null;
@Id
@ManyToOne(fetch = FetchType.LAZY)
private Customer customer = null; ....
}
我想要获得的是以下内容:
Customer
(使用其ID)和特定的Customer
号码,获取指定客户的Account
及其Account
(如果有) 这是我试图执行的hql查询来完成此任务:
从帐户中选择帐户,(从account.relations内部联接关系中选择关系。客户,客户ID =:id),其中account.number =:number
生成的sql如下:
选择account0_.Id为col_0_0_,
(选择
(relations1_.AccountId,
relations1_.CustomerId)
从
CustomerAccount relations1_
内连接 客户customer2_
on relations1_.CustomerId = customer2_.UserId
内连接 OlsUser customer2_1_
在customer2_.UserId = customer2_1_.Id
其中
account0_.Id = relations1_.AccountId
和customer2_.UserId =?)为col_1_0_,
account0_.Id为Id0_,
account0_.number为AccountN2_0 _,
account0_.Active as Active0_,
account0_.Application as Applicat4_0_,
account0_.Description as Descript8_0_,
account0_.LastUpdated为LastUpda9_0_,
从
帐户account__
其中
account0_.number =?
我认为hql中的子查询有问题,最后是异常
Relation
我与子查询的特定部分有关但不确定它在下面发生了什么。任何帮助将不胜感激。
答案 0 :(得分:0)
首先。地址实际上是帐户,对吧?
回答您的问题:您的查询比需要的要复杂得多。你所需要的只是
select account, relation from Relation relation
inner join relation.account account
where account.number = :number
and relation.customer.id = :customerId
答案 1 :(得分:0)
最后..如前所述,我让它复杂化了。查询比
更简单
select account, relation from Account account left join
account.relations relation with relation.customer.id = :id
where account.number = :number