Newsgroup: it.comp.java
Titolo: Hibernate PostgreSQL e campo autoincrement

Ciao, sono appena passato a postgre, ma credo che con mysql avrei
avuto lo stesso problema.
Allora invece di un campo autoincrement, in postgre si usa un tipo
"Serial" che praticamente viene trasformato in un integer e settato
con valore predefinito una funzione del genere
(nextval('users_id_seq'::regclass)). Il risultato però + lo stesso. Ho
un campo che non sarà mai nullo ma avrà sempre un campo di default non
nullo.
Ok, torno a java.
In hibernate ovviamente devo impostare il campo id con le annotazioni:
@Id
@Column(name = "id", unique = true, nullable = false)
NotNull
public int getId() {
     return this.
}
In realtà però io nella mia pagina l'id non voglio che sia impostato
dall'utente, ma voglio che se lo trovi lui quando fa l'inserimento...
Al momento il codice di acquisizione è questo:
              <h:outputLabel for="id">
                        id
                        <span class="required">*</span>
                    </h:outputLabel>
                    <s:decorate id="idDecoration">
                        <h:inputText id="id"
                               required="true"
                               disabled="#{usersHome.managed}"
                                  value="#{
usersHome.instance.id
}">
                            <a:support event="onblur"
reRender="idDecoration"/>
                        </h:inputText>
                    </s:decorate>
L'idea però è di togliere proprio il campo dal form.
Purtoppo questa soluzione non funziona.
La prima volta aggiunge una riga con campo id = 0, e dalla seconda
cerca di aggiungere righe usando sempre il campo id=0.
Praticamente Hibernate non lo trova  e da qualche parte lo imposta a
0. Ovviamente poi la query restituisce un errore perchè infrange il
vincolo di tupla.
Ho provato a togliere il campo id dall'Entity, ma hibernate si
arrabbia dicendo che vuole almeno un campo indice.
Idee?

 dall'utente, ma voglio che se lo trovi lui quando fa l'inserimento...
Devi usare l'annotazione @GeneratedValue, il quale ti permette anche
di scegliere come gestire la generazione automatica dell'id.
http://www.hibernate.org/hib_docs/ejb3-api/javax/persistence/GeneratedValue.html
--
SoulSpirit

 SoulSpirit
RIsolto!
Se a qualcuno può servire le annottazioni corrette da mettere prima
del metodo getId sono le seguenti:
@SequenceGenerator(name="genCommentId", sequenceName="users_id_seq")
@GeneratedValue(strategy=GenerationType.SEQUENCE,
generator="genCommentId")
dove "users_id_seq" è la funzione/sequenza usata da postgre.
l'unico problema è che non so per quale motivo parte da 250... ???
Vabbé...non mi crea nessun problema...era solo curiosità!

 
Ciao scusa sto affrontando lo stesso identico problema, solo che mi da 
eccezione perche dice che viola il vincolo di unicita. Cioe sembra che 
generi chiavi esistenti...
In ogni caso, nella tua entity, hai dovuto creare un costruttore privo 
del campo ID? I costruttori che no nella entity class chiaramente lo 
contemplano, ma dato che non voglio passarlo io, ho fatto un costruttore 
senza parametro id, e' corretto?
Grazie... sto un po impazzendo anche io :)
Co

 
E' un valore di default, l'annotazione SequenceGenerator prevede un 
parametro initialValue che puoi settare al valore iniziale!
Co