2016-04-07 24 views
8

Tôi đang sử dụng HibernatePostgres và xác định loại cột character(1)[].Cách tạo tiêu chí với trường mảng trong Hibernate

Vì vậy, tôi không biết cách thực hiện điều này criteria để tìm giá trị trong mảng.

Giống như truy vấn

SELECT * FROM cpfbloqueado WHERE bloqueados @> ARRAY['V']::character[] 
+0

bạn đã kiểm tra: http://stackoverflow.com/questions/22649964/how-to-save-or-retrieve-an-array-column-using-hibernate –

+0

Nếu bạn xem câu trả lời cuối cùng, đó là của tôi. – user3503888

+0

Bạn có thể đặt mã nguồn mà bạn đã thử không? – SubbaReddy

Trả lời

2

này Vì vậy, bạn có hàng loạt các nhân vật duy nhất ... Vấn đề là trong PG đó không phải là chiều dài cố định. Tôi đã có vấn đề này, nhưng khoảng 10 năm trước đây. Vào thời điểm đó, tôi đã có cột được ánh xạ dưới dạng chuỗi và theo cách đó tôi có thể xử lý dữ liệu nội bộ - chỉ cần cắt bằng dấu phẩy và thực hiện những gì cần thiết. Nếu bạn ghét theo cách đó, như tôi đã làm ... Hãy tìm các cột có loại text[] - đó là phổ biến hơn, do đó, thật dễ dàng để tìm ra điều gì đó. Vui lòng xem dự án mẫu này: https://github.com/phstudy/jpa-array-converter-sample

4

Tôi không quen với Postgres và các loại của nó nhưng bạn có thể xác định loại của riêng mình bằng cách sử dụng custom basic type mapping. Điều đó có thể đơn giản hóa truy vấn.

Có nhiều chủ đề ở đây về SO liên quan đến loại mảng Postres và Hibernate, ví dụ: this one. Một ví dụ lập bản đồ mảng khác có thể hữu ích is here. Cuối cùng, here is an example sử dụng Tiêu chí với loại người dùng.

Mã ví dụ có thể là

List result = session.createCriteria(Cpfbloqueado.class) 
    .setProjection(Projections.projectionList() 
     .add(Projections.property("characterColumn.attribute"), PostgresCharArrayType.class) 
    ) 
    .setResultTransformer(Transformer.aliasToBean(Cpfbloqueado.class)) 
    .add(...) // add where restrictions here 
    .list() 

Ngoài ra, nếu nó không phải là quan trọng đối với việc thực hiện, bạn có thể xác định chiều dài tối đa trong mô hình tổ chức nào, chú thích lĩnh vực của bạn với @Column(length = 1).

Hoặc nếu bạn cần lưu trữ một mảng ký tự có độ dài 1, bạn có thể sử dụng collection type.


Tôi hy vọng tôi có điểm đúng, tuy nhiên, sẽ tốt hơn nếu miền vấn đề được mô tả tốt hơn.

+0

Như tôi đã nói trong chủ đề, tôi muốn tìm một giá trị trong mảng, như mệnh đề IN, hãy tưởng tượng, nếu tôi có mảng ´ { 'A', 'B', 'C'} ´ và muốn biết liệu có thể tìm cột này bằng giá trị 'B' –

+1

@DiegoMacario: có, có thể sử dụng ElementCollection và xác định trường mảng trong Hibernate mô hình thực thể (và truy vấn nó như http://stackoverflow.com/questions/14090364/hql-how-to-query-elementcollection-of-string) hoặc định nghĩa kiểu người dùng mảng của riêng bạn (giống như http://stackoverflow.com/ câu hỏi/21940642/hibernate-postgres-array-type). –

Các vấn đề liên quan