| Using Hibernate 5.3.1 I seem to get a similar error (HHH000346, SQLState 22023) when the @JoinTable definition is named after the joined @Entity itself (which happens to have a composite @EmbeddedId) and the linked entity is first persisted, (redundantly) followed by the one-to-many mapping: {{ package test; @Embeddable public class MyCompositeId { @Column(name = "ref_name") private String name; @Column(name = "partial_id") private Integer id; @Column(name = "extension_id") private String extensionId; } interface MyLinkedEntity { } @Entity @Table(name = "my_join_table") class MyLinkedEntityImpl implements MyLinkedEntity { @EmbeddedId private MyCompositeId id; @Column(name = "extension_value") private byte[] extensionValue; } @Entity class MyEntry { @Id @Column(name = "name") private String name; @OneToMany(fetch = FetchType.EAGER, targetEntity = MyLinkedEntityImpl.class, cascade = CascadeType.ALL) @JoinTable(name = "my_join_table", schema = "public", joinColumns = @JoinColumn(name = "ref_name", insertable = false, updatable = false), inverseJoinColumns = { @JoinColumn(name = "extension_id", referencedColumnName = "extension_id"), @JoinColumn(name = "partial_name", referencedColumnName = "partial_name"), @JoinColumn(name = "ref_name", referencedColumnName = "entity_name"), } ) private Set<MyLinkedEntity> hmacKeys = new HashSet<>(); } DEBUG - insert into my_join_table (extension_value, partial_id, extension_id, ref_name) values (?, ?, ?, ?) [at o.h.SQL.logStatement(SqlStatementLogger.java:94)] TRACE - binding parameter [1] as [VARBINARY] - [[11, 12, 13, 14, 15]] [at o.h.t.d.s.BasicBinder.bind(BasicBinder.java:65)] TRACE - binding parameter [2] as [INTEGER] - [3] [at o.h.t.d.s.BasicBinder.bind(BasicBinder.java:65)] TRACE - binding parameter [3] as [VARCHAR] - [B] [at o.h.t.d.s.BasicBinder.bind(BasicBinder.java:65)] TRACE - binding parameter [4] as [VARCHAR] - [VWS1] [at o.h.t.d.s.BasicBinder.bind(BasicBinder.java:65)] : DEBUG - insert into my_join_table (ref_name, partial_id, extension_id) values (?, ?, ?) [at o.h.SQL.logStatement(SqlStatementLogger.java:94)] TRACE - binding parameter [1] as [VARCHAR] - [VWS1] [at o.h.t.d.s.BasicBinder.bind(BasicBinder.java:65)] TRACE - binding parameter [2] as [INTEGER] - [3] [at o.h.t.d.s.BasicBinder.bind(BasicBinder.java:65)] TRACE - binding parameter [3] as [VARCHAR] - [B] [at o.h.t.d.s.BasicBinder.bind(BasicBinder.java:65)] TRACE - binding parameter [4] as [VARCHAR] - [VWS1] [at o.h.t.d.s.BasicBinder.bind(BasicBinder.java:65)] WARN - SQL Error: 0, SQLState: 22023 [at o.h.e.j.s.SqlExceptionHelper.logExceptions(SqlExceptionHelper.java:129)] ERROR - The column index is out of range: 4, number of columns: 3. [at o.h.e.j.s.SqlExceptionHelper.logExceptions(SqlExceptionHelper.java:131)] ERROR - HHH000346: Error during managed flush [org.hibernate.exception.DataException: could not insert collection: test.MyEntry.keys#ID] [at o.h.i.ExceptionMapperStandardImpl.mapManagedFlushFailure(ExceptionMapperStandardImpl.java:39)] }} |