我尝试在 spring boot 中通过存储库加载一些数据。主要实体完全没问题并且包含数据。 @OneToMany 关系集合除外。 从调试输出中可以看到正确的查询,它肯定会返回数据。
问题:
- 即使执行生成的 SQL 并返回结果,bookings 列表也为空。
- stackoverflow 上没有线程可以解决我的问题。
我是这样尝试的:
Optional<Ad> pi = adRepository.findById(adID);
if (!pi.isPresent()) {
return null;
}
Ad ad = pi.get();
List<Booking> bookings = ad.getItem().getBookings();
// bookings is null. why is it not populated?
// i've also tried use FetchType.EAGER. Didn't helped
广告
@Entity
@Table(schema = "xxx", name = "AD")
public class Ad {
@Id
@Column(name = "adID")
private Long id;
@OneToOne(optional=true, mappedBy="ad", fetch=FetchType.LAZY, cascade=CascadeType.ALL)
private Item item;
}
项目
@Entity
@Table(schema="xxx", name="ITEM")
public class Item {
@Id
@OneToOne(optional=true, fetch=FetchType.LAZY)
@JoinColumn(name="adID", unique=true, nullable=false, updatable=false)
private Ad ad;
@OneToMany(mappedBy = "item")
private List<Booking> bookings;
}
预订
@Entity
@Table(schema = "xxx", name = "BOOKING")
public class Booking {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "bookID")
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "adID", nullable = false, referencedColumnName = "adID")
private Item item;
}
Hibernate 生成的查询
select
bookings0_.adID as adID8_34_0_,
bookings0_.bookID as bookID1_34_0_,
bookings0_.bookID as bookID1_34_1_
from xxx.BOOKING bookings0_
where bookings0_.prditmID=1337
有什么我遗漏的吗?
问候
最佳答案
问题是 Item 类和 @Id 声明。 更改为并且有效。
@Entity
@Table(schema="xxx", name="ITEM")
public class Item {
@Id
@Column(name = "adID")
private Long id;
@OneToOne(optional=true, fetch=FetchType.LAZY)
@JoinColumn(name="adID", unique=true, nullable=false, updatable=false)
private Ad ad;
@OneToMany(mappedBy = "item")
private List<Booking> bookings;
}
关于java - Spring Boot Hibernate @OneToMany 集合总是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58834932/