书中的用例;Java持久化与Hibernate,第二版“;
我正在读《Java持久化与Hibernate,第二版》。它举了一个向ebay这样的竞标者出售物品的例子。在第400页,作者说 查询书中的用例;Java持久化与Hibernate,第二版“;,hibernate,hql,Hibernate,Hql,我正在读《Java持久化与Hibernate,第二版》。它举了一个向ebay这样的竞标者出售物品的例子。在第400页,作者说 查询select i from item i left join fetch i.bids b其中b.amount>20无效。您不能说“加载项目实例并初始化其bids集合,但只能使用具有一定数量的Bid实例。” 我不太明白。在我看来,这是有效的,但它将只呈现的项目有一个出价金额大于20。在这种情况下,它将呈现具有该条件的内部联接 此外,以下请求是否有效?select i
select i from item i left join fetch i.bids b其中b.amount>20
无效。您不能说“加载项目实例并初始化其bids集合,但只能使用具有一定数量的Bid实例。”
我不太明白。在我看来,这是有效的,但它将只呈现的项目有一个出价金额大于20。在这种情况下,它将呈现具有该条件的内部联接
此外,以下请求是否有效?
select i from item i left join fetch i.bids b on b.amount>20
有效?select i from item i left join fetch i.bids b其中b.amount>20
作为HQL无效。由于HQL结果用于返回项目对象,因此您不能告诉hibernate请创建项目
对象,但在创建对象时,不要使用所有投标
填充,而只使用金额大于20的投标
填充
考虑下面的类
public class Item {
String name;
Collection<Bid> bids;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Collection<Bid> getBids() {
return bids;
}
public void setBids(Collection<Bid> bids) {
this.bids = bids;
}
}
公共类项目{
字符串名;
收集投标书;
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公开募捐{
退还投标书;
}
公共招标(集合投标){
此参数为:投标=投标;
}
}
Update:(让我们运行一个示例,看看如果hibernate允许此查询,会发生什么情况)
如果hibernate允许它发生,主要问题是:
操作,从i.itemId=1的项目i中选择i,hibernate就会出现问题,因为现在它必须有两个java对象来表示该会话中的项目1(一个出价大于20,另一个出价大于项目1的所有出价)
希望这能清楚地解释为什么查询不能被允许
从项目i中选择i左加入fetch i.bids b其中b.amount>20
,因为HQL无效。由于HQL结果用于返回项目对象,因此您不能告诉hibernate请创建项目
对象,但在创建对象时,不要使用所有投标
填充,而只使用金额大于20的投标
填充
考虑下面的类
public class Item {
String name;
Collection<Bid> bids;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Collection<Bid> getBids() {
return bids;
}
public void setBids(Collection<Bid> bids) {
this.bids = bids;
}
}
公共类项目{
字符串名;
收集投标书;
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公开募捐{
退还投标书;
}
公共招标(集合投标){
此参数为:投标=投标;
}
}
Update:(让我们运行一个示例,看看如果hibernate允许此查询,会发生什么情况)
如果hibernate允许它发生,主要问题是:
操作,从i.itemId=1的项目i中选择i,hibernate就会出现问题,因为现在它必须有两个java对象来表示该会话中的项目1(一个出价大于20,另一个出价大于项目1的所有出价)
希望这能清楚地解释为什么不允许查询这个例子是关于HQL(Hibernate的查询语言)而不是SQL本身的,对吗?是的,它是关于HQL的例子是关于HQL(Hibernate的查询语言)而不是SQL本身的,对吗?是的,它是关于HQL谢谢你的回答谢谢你的回答