Hibernate JPA - 错误生成插入语句

问题描述 投票:0回答:1

Hibernate 正在为以下具有单表继承和使用 @IdClass 的复合主键的实体模型生成错误的插入语句 - 错误的列绑定。 想知道这是否是一个 Hibernate 错误。
堆栈:Spring Boot 2.7 / H2

超类基础实体 - AbstractMemberEvent:

@Entity
@Table(name = "MEMBER_EVENTS")
@Getter
@FieldDefaults(level = AccessLevel.PRIVATE)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "EVENT_TYPE")
@NoArgsConstructor
@IdClass(MemberEventId.class)
public abstract class AbstractMemberEvent {
    @Id
    @Column(name = "USID")
    String usid;
    @Id
    @Column(name = "UPDATED")
    Long eventTime;
    @Id
    @Column(name = "EVENT_TYPE", insertable = false, updatable = false )
    String eventType;

子类实体 - NewMemberJoined

@Entity
@Getter
@Setter
@FieldDefaults(level = AccessLevel.PRIVATE)
@DiscriminatorValue("NEWMEMBERJOINED")
@NoArgsConstructor
public class NewMemberJoined extends AbstractMemberEvent{
    @Column(name="PAYLOAD")
    NewMemberJoinedInfo newMemberJoinedInfo;

IdClass

@Getter
@FieldDefaults(level = AccessLevel.PRIVATE)
@NoArgsConstructor
@EqualsAndHashCode
public class MemberEventId implements Serializable {
    String usid;
    Long eventTime;
    String eventType;
}

从日志中我看到参数绑定了错误的值

Hibernate: 
    
    create table member_events (
       event_type varchar(31) not null,
        updated bigint not null,
        usid varchar(255) not null,
        payload varchar(255),
        primary key (updated, event_type, usid)
    )

...

Hibernate: 
    insert 
    into
        member_events
        (payload, event_type, updated, usid) 
    values
        (?, ?, ?, ?)
2022-11-25 21:52:13.789 DEBUG 527088 --- [  restartedMain] tributeConverterSqlTypeDescriptorAdapter : Converted value on binding : ...
2022-11-25 21:52:13.790 TRACE 527088 --- [  restartedMain] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARCHAR] - [{"firstName":"Jasper" ...}]
2022-11-25 21:52:13.790 TRACE 527088 --- [  restartedMain] o.h.type.descriptor.sql.BasicBinder      : binding parameter [2] as [BIGINT] - [1388534400000]
2022-11-25 21:52:13.790 TRACE 527088 --- [  restartedMain] o.h.type.descriptor.sql.BasicBinder      : binding parameter [3] as [VARCHAR] - [NEWMEMBERJOINED]
2022-11-25 21:52:13.790 TRACE 527088 --- [  restartedMain] o.h.type.descriptor.sql.BasicBinder      : binding parameter [4] as [VARCHAR] - [3060001234567]
2022-11-25 21:52:13.794  WARN 527088 --- [  restartedMain] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 22018, SQLState: 22018
2022-11-25 21:52:13.794 ERROR 527088 --- [  restartedMain] o.h.engine.jdbc.spi.SqlExceptionHelper   : Data conversion error converting "'NEWMEMBERJOINED' (MEMBER_EVENTS: ""UPDATED"" BIGINT NOT NULL)"; SQL statement:
insert into member_events (payload, event_type, updated, usid) values (?, ?, ?, ?) [22018-214]7'
java spring hibernate jpa spring-data-jpa
1个回答
0
投票

出现此问题的原因可能是未使用方言或版本错误。检查驱动程序并使用正确的驱动程序更新它们。

我遇到了同样的问题,发现我没有使用 MSSQL 服务器的方言、隐式策略和物理策略。

© www.soinside.com 2019 - 2024. All rights reserved.