【发布时间】:2017-01-13 22:46:58
【问题描述】:
我有这个代码:
@Table(name = "Prize")
public class Prize {
@Id
@Column(
nullable = false,
unique = true
)
private int id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@Fetch(FetchMode.JOIN)
private Set<TicketNumber> numbers;
}
@Table(name = "TicketNumber")
public class TicketNumber {
@Id
@Column(
nullable = false,
unique = true
)
private int id;
}
这将创建一个名为 Prize_TicketNumber 的连接表,其中包含两个字段(Prize_id 和 TicketNumber_id),但是当我保存包含许多号码的奖品时,该表中只插入了一条记录。有谁知道为什么?
编辑:这是插入的代码。存储库是简单的 JpaRepositories。
Prize prize = prizeRepository.findById(prizeId);
if(prize == null) return;
List<TicketNumber> winners = ticketNumberRepository.findByPrizeId(fixedPrize.getId());
if (winners != null && !winners.isEmpty()) {
for (TicketNumber winner : winners) {
winner.setWinner(false);
TicketNumber t = ticketNumberRepository.save(winner);
}
raffleNumberRepository.flush();
}
prize.getTicketNumbers().clear();
for (String ticketId : ids) {
TicketNumber ticketNumber = ticketNumberRepository.findOne(ticketId);
if (ticketNumber != null) {
ticketNumber.setWinner(true);
prize.getTicketNumbers().add(raffleNumber);
}
}
prize.setNumbersAssigned(true);
prizeRepository.saveAndFlush(prize);
【问题讨论】:
-
发布您的代码。插入 ma,y 个数字的代码,以及两个实体的完整代码。
-
您是否尝试使用 List 而不是 Set ?也许你对equals有问题
-
我敢打赌它也是 equals 和 hashCode
-
我不认为它是等于和/或哈希码,因为该集合包含所有正确的对象,就在进行保存之前。 @JBNizet 我发布了插入的代码。实体没有更多代码,只有 getter 和 setter 以及无趣的东西。
标签: java hibernate jpa spring-data-jpa