【发布时间】:2026-02-02 17:15:01
【问题描述】:
@Entity
public class Bid {
@Id
@GeneratedValue
@Column(name = "bid_id")
private Long bidId;
@Column(name = "bid_amt")
private double bidAmount;
@Basic(fetch = FetchType.LAZY, optional = false)
private String person;
@ManyToOne(targetEntity = Item.class, fetch = FetchType.LAZY)
@JoinColumn(name = "bid_item", referencedColumnName = "item_id", nullable = false)
private Item item;
public Long getBidId() {
return bidId;
}
public double getBidAmount() {
return bidAmount;
}
public String getPerson() {
return person;
}
public Item getItem() {
return item;
}
public void setBidAmount(final double bidAmount) {
this.bidAmount = bidAmount;
}
public void setPerson(final String person) {
this.person = person;
}
public void setItem(final Item item) {
this.item = item;
}
public Bid() {
}
@Override
public String toString() {
return "Bid [bidId=" + bidId + ", bidAmount=" + bidAmount + ", person="
+ person + /* ", item=" + item + */"]";
}
}
测试用例:
@Test
public void testBidRead() {
final Session currentSession = sessionFactory.getCurrentSession();
final List<Bid> bids = currentSession.createQuery("from Bid").list();
for (final Bid bid : bids) {
System.out.println(bid);
}
}
Hibernate 生成的 SQL 是:
/*
from
Bid */ select
bid0_.bid_id as bid1_1_,
bid0_.bid_amt as bid2_1_,
bid0_.bid_item as bid4_1_,
bid0_.person as person1_
from
Bid bid0_
问题:虽然我将person 属性标记为lazy && optional,但为什么它是SQL 查询的一部分?这是否意味着 Hibernate 不会延迟获取?项目也是如此。
如何延迟获取属性?
【问题讨论】:
标签: java hibernate lazy-loading