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

chú thích ngủ đông thích hợp cho byte []

Cách di động để chú thích thuộc tính byte [] là gì?

Nó phụ thuộc vào những gì bạn muốn. JPA có thể tồn tại một byte[] không được chú thích . Từ thông số JPA 2.0:

11.1.6 Chú thích cơ bản

Basic chú thích là kiểu ánh xạ đơn giản nhất tới cột cơ sở dữ liệu. Basic chú thích có thể được áp dụng cho một thuộc tính liên tục hoặc có thể thay đổi phiên bản của bất kỳ kiểu nào sau đây:Java nguyên thủy, các kiểu, wrappers của các kiểu nguyên thủy, java.lang.String , java.math.BigInteger , java.math.BigDecimal , java.util.Date , java.util.Calendar , java.sql.Date , java.sql.Time , java.sql.Timestamp , byte[] , Byte[] , char[] , Character[] , enums và bất kỳ kiểu nào khác triển khai Serializable Như được mô tả trong Phần 2.8, việc sử dụng Basic chú thích là tùy chọn cho các trường liên tục và thuộc tính của các loại này. Nếu Chú thích cơ bản không được chỉ định cho trường hoặc thuộc tính như vậy, các giá trị mặc định của chú thích cơ bản sẽ được áp dụng.

Và Hibernate sẽ ánh xạ nó "theo mặc định" thành một VARBINARY trong SQL (hoặc một LONGVARBINARY của SQL tùy thuộc vào Column kích thước?) mà PostgreSQL xử lý bằng bytea .

Nhưng nếu bạn muốn byte[] để được lưu trữ trong Đối tượng lớn, bạn nên sử dụng @Lob . Từ thông số kỹ thuật:

11.1.24 Chú thích Lob

Một Lob chú thích chỉ định rằng thuộc tính hoặc trường tồn tại phải được hỗ trợ như một đối tượng lớn đối với loại đối tượng lớn được hỗ trợ bởi adatabase. Các ứng dụng có thể sử dụng nên sử dụng Lob chú thích khi ánh xạ tới adatabase Lob gõ phím. Lob chú thích có thể được sử dụng cùng với chú thích Cơ bản hoặc với ElementCollection chú thích khi giá trị bộ sưu tập gia tốc là loại cơ bản. Một Lob có thể là một loại ký tự hoặc ký tự nhị phân. Lob loại được suy ra từ loại trường hoặc thuộc tính tồn tại và, ngoại trừ loại chuỗi và ký tự, mặc định là Blob.

Và Hibernate sẽ ánh xạ nó tới một BLOB SQL mà PostgreSQL xử lý bằng oid .

Điều này có được khắc phục trong một số phiên bản gần đây của chế độ ngủ đông không?

Chà, vấn đề là tôi không biết vấn đề chính xác là gì. Nhưng ít nhất tôi có thể nói rằng không có gì thay đổi kể từ 3.5.0-Beta-2 (đó là nơi một thay đổi đã được giới thiệu) trong nhánh 3.5.x.

Nhưng sự hiểu biết của tôi về các vấn đề như HHH-4876, HHH-4617 và PostgreSQL và BLOBs (được đề cập trong javadoc của PostgreSQLDialect ) là bạn phải đặt thuộc tính sau

hibernate.jdbc.use_streams_for_binary=false

nếu bạn muốn sử dụng oid tức là byte[] với @Lob (đó là hiểu biết của tôi kể từ khi VARBINARY không phải là những gì bạn muốn với Oracle). Bạn đã thử cái này chưa?

Thay vào đó, HHH-4876 đề xuất sử dụng PrimitiveByteArrayBlobType không dùng nữa để có được hành vi cũ (trước Hibernate 3.5).

Tài liệu tham khảo

  • Đặc điểm kỹ thuật JPA 2.0
    • Phần 2.8 "Mặc định ánh xạ cho các trường hoặc thuộc tính không có mối quan hệ"
    • Phần 11.1.6 "Chú thích cơ bản"
    • Phần 11.1.24 "Chú thích Lob"

Tài nguyên

  • http://opensource.atlassian.com/projects/hibernate/browse/HHH-4876
  • http://opensource.atlassian.com/projects/hibernate/browse/HHH-4617
  • http://relation.to/Bloggers/PostgreSQLAndBLOBs


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào tôi có thể kiểm tra xem một cột tồn tại trong bảng bằng câu lệnh SQL

  2. Chuyển đổi hex trong biểu diễn văn bản thành số thập phân

  3. Cập nhật hoặc Chèn (nhiều hàng và cột) từ truy vấn con trong PostgreSQL

  4. PostgreSQL 8.4 cấp các đặc quyền DML trên tất cả các bảng cho một vai trò

  5. Khôi phục kết xuất trên máy từ xa