Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách chú thích trường tự động tăng thêm MYSQL với chú thích JPA

Để sử dụng MySQL AUTO_INCREMENT , bạn phải sử dụng IDENTITY chiến lược:

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;

Đó là những gì bạn nhận được khi sử dụng AUTO với MySQL:

@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;

Điều này thực sự tương đương với

@Id @GeneratedValue
private Long id;

Nói cách khác, ánh xạ của bạn sẽ hoạt động. Nhưng Hibernate nên bỏ qua id trong câu lệnh chèn SQL, và nó không phải. Chắc hẳn ở đâu đó có một kiểu không khớp.

Bạn đã chỉ định phương ngữ MySQL trong cấu hình Hibernate của mình chưa (có thể là MySQL5InnoDBDialect hoặc MySQL5Dialect tùy thuộc vào động cơ bạn đang sử dụng)?

Ngoài ra, ai đã tạo ra bảng? Bạn có thể hiển thị DDL tương ứng không?

Tiếp theo: Tôi không thể tái tạo vấn đề của bạn. Sử dụng mã của của bạn thực thể và của bạn DDL, Hibernate tạo SQL (dự kiến) sau với MySQL:

insert 
into
    Operator
    (active, password, username) 
values
    (?, ?, ?)

Lưu ý rằng id không có trong câu lệnh trên, như mong đợi.

Tóm lại, mã của bạn, định nghĩa bảng và phương ngữ là chính xác và mạch lạc, nó sẽ hoạt động. Nếu nó không phù hợp với bạn, có thể có thứ gì đó không đồng bộ (tạo bản dựng sạch sẽ, kiểm tra kỹ thư mục bản dựng, v.v.) hoặc có gì đó khác chỉ là sai (kiểm tra nhật ký xem có bất kỳ điều gì đáng ngờ).

Về phương ngữ, chỉ sự khác biệt giữa MySQL5Dialect hoặc MySQL5InnoDBDialect là sau này thêm ENGINE=InnoDB vào các đối tượng bảng khi tạo DDL. Sử dụng cái này hay cái kia không thay đổi SQL được tạo.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khóa ngoại MySQL InnoDB giữa các cơ sở dữ liệu khác nhau

  2. Làm cách nào để kết nối với MySQL bằng Python 3 trên Windows?

  3. Thiết kế bảng thực thể-thuộc tính-giá trị

  4. Ngoại lệ Java JDBC MySQL:Hoạt động không được phép sau khi đóng ResultSet

  5. Tuyên bố Sử dụng Ví dụ Tạo Bảng của JDBC