Rumah  >  Soal Jawab  >  teks badan

Masalah dengan betul menambah nilai boolean ke mysql melalui spring jpa

Jadi saya mahu mengekalkan beberapa objek ke SQL. Ini meja saya:

CREATE TABLE `user_segment`  (
`id` INT(11) PRIMARY KEY AUTO_INCREMENT NOT NULL ,
`name` VARCHAR(50) NOT NULL,
`active` BOOLEAN NOT NULL DEFAULT true,
`count` INT(11) NOT NULL,
`s3_link` VARCHAR(255) NOT NULL,
`created_date` datetime NOT NULL DEFAULT current_timestamp(),
`modified_date` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()

);

Sekarang, saya sedang mengusahakan aplikasi Spring Boot yang menggunakan JpaRepository. Ini kelas saya.

@Data
@Entity
@Table(name = "user_segment")
public class UserSegment {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(name = "name")
    private String name;
    
    @Column(name = "active")
    private Boolean active = true;

    @Column(name = "count")
    private Integer count;

    @Column(name = "s3_link")
    private String s3Link;

    @CreatedDate
    @Column(name = "created_date")
    private Date createdDate = new Date();

    public UserSegment(String name, String s3Link,int count) {
        this.name = name;
        this.s3Link = s3Link;
        this.count = count;
    }
}

Kelas repositori saya kelihatan seperti ini:

public interface UserSegmentRepository extends JpaRepository<UserSegment, Integer> {

}

Sekarang, kod yang saya benar-benar berpegang pada ini.

Saya memanggil pembina dahulu dan kemudian kaedah .save() standard.

UserSegment userSegment = new UserSegment(name, fileUrl, count);
        userSegmentRepository.save(userSegment);

Nama, kiraan dan URL fail dijana dengan betul. Saya tahu ini kerana saya menyahpepijat dan menilainya sebelum pernyataan .save(). Saya telah melampirkan tangkapan skrin yang sama.

Namun, apabila benar-benar melaksanakan save, saya mendapat ralat SQL ini. Saya juga mencetak beberapa log. Nampaknya semua nilai sedang ditetapkan kepada null:

org.hibernate.SQL                        : insert into user_segment (`active`, `count`, created_date, `name`, s3_link) values (?, ?, ?, ?, ?)
2022-02-22 20:38:06.061 DEBUG 28799 --- [nio-8080-exec-2] tributeConverterSqlTypeDescriptorAdapter : Converted value on binding : null -> null
2022-02-22 20:38:06.063 TRACE 28799 --- [nio-8080-exec-2] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARCHAR] - [null]
2022-02-22 20:38:06.063 DEBUG 28799 --- [nio-8080-exec-2] tributeConverterSqlTypeDescriptorAdapter : Converted value on binding : null -> null
2022-02-22 20:38:06.063 TRACE 28799 --- [nio-8080-exec-2] o.h.type.descriptor.sql.BasicBinder      : binding parameter [2] as [VARCHAR] - [null]
2022-02-22 20:38:06.063 DEBUG 28799 --- [nio-8080-exec-2] tributeConverterSqlTypeDescriptorAdapter : Converted value on binding : null -> null
2022-02-22 20:38:06.063 TRACE 28799 --- [nio-8080-exec-2] o.h.type.descriptor.sql.BasicBinder      : binding parameter [3] as [VARCHAR] - [null]
2022-02-22 20:38:06.063 DEBUG 28799 --- [nio-8080-exec-2] tributeConverterSqlTypeDescriptorAdapter : Converted value on binding : null -> null
2022-02-22 20:38:06.063 TRACE 28799 --- [nio-8080-exec-2] o.h.type.descriptor.sql.BasicBinder      : binding parameter [4] as [VARCHAR] - [null]
2022-02-22 20:38:06.064 DEBUG 28799 --- [nio-8080-exec-2] tributeConverterSqlTypeDescriptorAdapter : Converted value on binding : null -> null
2022-02-22 20:38:06.064 TRACE 28799 --- [nio-8080-exec-2] o.h.type.descriptor.sql.BasicBinder      : binding parameter [5] as [VARCHAR] - [null]
2022-02-22 20:38:06.106  WARN 28799 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1366, SQLState: 22001
2022-02-22 20:38:06.107 ERROR 28799 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper   : Data truncation: Incorrect integer value: 'null' for column 'active' at row 1
2022-02-22 20:38:06.216 ERROR 28799 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[.[dispatcherServlet]      : Servlet.service() for servlet [dispatcherServlet] in context with path [/notificationservice/api/v1] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.DataException: could not execute statement] with root cause

com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect integer value: 'null' for column 'active' at row 1
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:104) ~[mysql-connector-java-8.0.16.jar:8.0.16]
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:955) ~[mysql-connector-java-8.0.16.jar:8.0.16]
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1094) ~[mysql-connector-java-8.0.16.jar:8.0.16]
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1042) ~[mysql-connector-java-8.0.16.jar:8.0.16]
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1345) ~[mysql-connector-java-8.0.16.jar:8.0.16]
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1027) ~[mysql-connector-java-8.0.16.jar:8.0.16]


P粉883278265P粉883278265319 hari yang lalu439

membalas semua(1)saya akan balas

  • P粉638343995

    P粉6383439952023-12-06 12:51:41

    Saya menyelesaikan masalah saya. Saya melihat bahawa semua parameter dianggap sebagai VARCHAR apabila mengikat, walaupun ini tidak berlaku.

    Di tempat lain dalam kod saya, saya mempunyai penukar berlabel @Converter(autoApply= true).Penukar ini berfungsi untuk medan VARCHAR dan digunakan secara automatik pada semua medan dalam semua entiti saya. Ini tidak disengajakan di pihak saya.

    Jika anda mahukan penukar yang digunakan secara automatik, sesetengah medan boleh mengatasi penukar ini dengan menambahkan lebih banyak sifat dalam anotasi @Column. Di bawah ialah pengubahsuaian yang berkesan untuk saya.

    @Data
    @Entity
    @Table(name = "user_segment")
    @NoArgsConstructor
    public class UserSegment {
    
        @Id
        @Column(name = "id")
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;
    
        @Column(name = "`name`", nullable = false, length = 50)
        private String name;
    
        @Column(name = "`active`", nullable = false, columnDefinition = "default bit 1")
        private boolean active = true;
    
        @Column(name = "`count`", nullable = false, columnDefinition = "default integer 0")
        private int count;
    
        @Column(name = "s3_link", nullable = false, length = 255)
        private String s3Link;
    
        @CreatedDate
        @Temporal(value = TemporalType.TIMESTAMP)
        @Column(name = "created_date", nullable = false, columnDefinition = "default datetime current_timestamp()")
        private Date createdDate;
    
        public UserSegment(String name, String s3Link,int count) {
            this.name = name;
            this.s3Link = s3Link;
            this.count = count;
        }
    }

    balas
    0
  • Batalbalas