我有一个双向的一对多关系如下。在我的测试中,我插入了一个父实体和三个子实体。然后我计算准备好的陈述的数量。hibernate告诉我是6,但是在日志中我只看到4条insert语句被记录。为什么会这样?
public class Order {
@Id
private Long id;
@OneToMany(mappedBy = "order", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
private List<Line> lines = new ArrayList<>();
public void addLine(Line line) {
lines.add(line);
line.setOrder(this);
}
}
public class Line {
@Id
private Long id;
@ManyToOne
private Order order;
}
测试
@Test
public void test() {
Statistics stat = entityManager.unwrap(Session.class).getSessionFactory().getStatistics();
Line line1 = Line.builder().lineNbr("1").build();
Line line2 = Line.builder().lineNbr("2").build();
Line line3 = Line.builder().lineNbr("3").build();
Order order = Order.builder().orderNbr("1").lines(new ArrayList<>()).build();
order.addLine(line1);
order.addLine(line2);
order.addLine(line3);
repo.saveAndFlush(order);
assertEquals(4, stat.getEntityInsertCount());
assertEquals(4, stat.getPrepareStatementCount()); // this fails. Hibernate says it's 6
}
这是我在日志中看到的:
Hibernate: insert into orders (order_nbr, id) values (?, ?)
Hibernate: insert into line (line_nbr, order_id, id) values (?, ?, ?)
Hibernate: insert into line (line_nbr, order_id, id) values (?, ?, ?)
Hibernate: insert into line (line_nbr, order_id, id) values (?, ?, ?)
927500 nanoseconds spent preparing 6 JDBC statements;
2732200 nanoseconds spent executing 4 JDBC statements;
2118000 nanoseconds spent executing 2 JDBC batches; -------- what is this?
1条答案
按热度按时间sauutmhj1#
第一个
Line
insert算作普通语句,以下两个算作批插入,即它们重用同一语句或使用jdbc批处理。我不确定他们是否还被算作准备好的陈述,但我想是的。