hibernate statistics语句计数-不正确

cgyqldqp  于 2021-07-07  发布在  Java
关注(0)|答案(1)|浏览(312)

我有一个双向的一对多关系如下。在我的测试中,我插入了一个父实体和三个子实体。然后我计算准备好的陈述的数量。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?
sauutmhj

sauutmhj1#

第一个 Line insert算作普通语句,以下两个算作批插入,即它们重用同一语句或使用jdbc批处理。我不确定他们是否还被算作准备好的陈述,但我想是的。

相关问题