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

Java Enums, JPA và Postgres enums - Làm cách nào để làm cho chúng hoạt động cùng nhau?

Tôi thực sự đang sử dụng một cách đơn giản hơn cách với PGObject và Converters. Vì trong Postgres enums được chuyển đổi khá tự nhiên thành văn bản, bạn chỉ cần để nó làm những gì nó làm tốt nhất. Tôi sẽ mượn ví dụ về tâm trạng của Arjan, nếu anh ấy không phiền:

Loại enum trong Postgres:

CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');

Lớp và enum trong Java:

public @Entity class Person {

  public static enum Mood {sad, ok, happy};

  @Enumerated(EnumType.STRING)
  Mood mood;

}

Thẻ @Enumerated đó nói rằng tuần tự hóa / giải mã hóa của enum nên được thực hiện dưới dạng văn bản. Nếu không có nó, nó sử dụng int, điều này rắc rối hơn bất cứ thứ gì.

Tại thời điểm này, bạn có hai lựa chọn. Bạn cũng có thể:

  1. Thêm stringtype =chưa xác định sang chuỗi kết nối, như đã giải thích trong các tham số kết nối JDBC. Điều này cho phép Postgres đoán kiểu bên phải và chuyển đổi mọi thứ một cách đầy đủ, vì nó nhận được một thứ như 'enum =nown', đó là một biểu thức mà nó đã biết phải làm gì (nguồn cấp dữ liệu giá trị? cho bộ khử không khí loại bên trái). Đây là tùy chọn ưu tiên, vì nó sẽ hoạt động với tất cả các UDT đơn giản như enums trong một lần.

    jdbc:postgresql://localhost:5432/dbname?stringtype=unspecified
    

Hoặc:

  1. Tạo một chuyển đổi ngầm định từ varchar thành enum trong cơ sở dữ liệu. Vì vậy, trong trường hợp thứ hai này, cơ sở dữ liệu nhận được một số phép gán hoặc so sánh như 'enum =varchar' và nó tìm thấy một quy tắc trong danh mục nội bộ của nó nói rằng nó có thể chuyển giá trị bên phải thông qua hàm tuần tự hóa của varchar theo sau là hàm deserialization của enum. Đó là nhiều bước hơn mức cần thiết; và việc có quá nhiều hàm ẩn trong danh mục có thể khiến các truy vấn tùy ý có cách diễn giải không rõ ràng, vì vậy hãy sử dụng nó một cách tiết kiệm. Tạo diễn viên là:

    TẠO CAST (NHÂN VẬT CHUYỂN ĐỔI theo tâm trạng) KHÔNG NHƯ Ý TƯỞNG;

Chỉ nên làm việc với điều đó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chi phí công khai PostgreSQL miễn phí

  2. Vị trí cột id trong Postgresql có quan trọng không?

  3. PG ::InvalidParameterValue:ERROR:giá trị không hợp lệ cho tham số client_min_messages:hoảng sợ

  4. Hàm LPAD () trong PostgreSQL

  5. Postgres và chỉ mục trên các khóa ngoại và khóa chính