2016-04-07 24 views
8

Sto utilizzando Hibernate e Postgres e definito un tipo di colonna character(1)[].Come rendere i criteri con campo array in Hibernate

Quindi non so come fare questo criteria per trovare un valore nella matrice.

Ti piace questa interrogazione

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

ha controllato: http://stackoverflow.com/questions/22649964/how-to-save-or-retrieve-an-array-column-using-hibernate –

+0

Se si guarda l'ultima risposta, è mia. – user3503888

+0

Puoi inserire il codice sorgente che hai provato? – SubbaReddy

risposta

2

in modo da avere array di caratteri singoli ... Il problema è che nel PG che non è di lunghezza fissa. Ho avuto questo problema, ma circa 10 anni fa. A quel tempo avevo la colonna mappata come stringa, e in quel modo ero in grado di elaborare i dati interni: basta separarli con una virgola e fare ciò che è necessario. Se odio in questo modo, come ho fatto ... Cerca le colonne con il tipo text[] - che è più comune, quindi è abbastanza facile scoprire qualcosa. Si prega di guardare a questo progetto di esempio: https://github.com/phstudy/jpa-array-converter-sample

4

non ho familiarità con Postgres ed i suoi tipi, ma si può definire un tipo utilizzando custom basic type mapping. Questo potrebbe semplificare la query.

Ci sono molti thread qui su SO per quanto riguarda i tipi di array Postres e Hibernate, ad esempio, this one. Un altro esempio di mappatura di array che potrebbe essere utile is here. Finalmente, here is an example di usare i criteri con il tipo di utente.

esempio di codice potrebbe essere

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() 

Inoltre, se non è importante per l'attuazione, è possibile definire la lunghezza massima nel modello di entità, annotare il vostro campo con @Column(length = 1).

Oppure se è necessario memorizzare una serie di caratteri con lunghezza di 1 è possibile utilizzare uno collection type.


Spero di aver capito bene, tuttavia, sarebbe bello se il dominio del problema fosse descritto meglio.

+0

Come ho detto nell'argomento, voglio trovare un valore nell'array, come nella clausola IN, immagina, se ho un array '{ 'A', 'B', 'C'} 'e voglio sapere se è possibile trovare questa colonna guardare con il valore' B ' –

+1

@DiegoMacario: sì, è possibile utilizzare ElementCollection e definire il campo dell'array in Hibernate modello di entità (e interrogarlo come http://stackoverflow.com/questions/14090364/hql-how-to-query-elementcollection-of-string) o definire il proprio tipo di utente di array (qualcosa come http://stackoverflow.com/ domande/21940642/hibernate-postgres-array-type). –