Thanks for the reply! Here are the entity classes:
@Getter
@Setter
@MappedSuperclass
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public abstract sealed class BaseTabData permits TabData, TabDataStaging {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "tab_data_seq")
@SequenceGenerator(name = "tab_data_seq", sequenceName = "tab_data_seq", allocationSize = 500)
private Long id;
@EqualsAndHashCode.Include
private String col1;
@EqualsAndHashCode.Include
private String col2;
@EqualsAndHashCode.Include
private String col3;
}
@Entity
@NamedQuery(name = "TabData.copyFromStaging",
query = """
insert into TabData (
id,
col1,
col2,
col3
)
select max(id),
col1,
col2,
col3
from TabDataStaging
group by col1,
col2,
col3""")
public final class TabData extends BaseTabData {}
@Entity
public final class TabDataStaging extends BaseTabData {}
I have an integration test running against H2 that does the following:
- Insert 500 rows into tab_data_staging
- Clear tab_data
- Copy all rows from tab_data_staging into tab_data (using the TabData.copyFromStaging named query).
Here’s the log output running with Hibernate 5:
Here’s the log output running with Hibernate 6 (notice there are no update statements against the HTE table):
I have hibernate.jdbc.batch_size=1000 configured, if that matters. |