JanKoWeb: Tvorba webu - Java EE: autoinkrement u PostgreSQL

Java EE: autoinkrement u PostgreSQL

Když jsem s Java EE začínal, velmi dlouho jsem hledal, jak se nastaví autoincrement u pole v PostgreSQL.

Předpokládám, že máte vytvořenou databázi na PostgreSQL, ve které je pro příklad tabulka Lide, která obsahuje primání klíč id_clovek. K databázi máte nastavené připojení. Dále máte založenou Java EE Application, ve které jste dali New File / Persistence /Entity classes from database - a nechali jste si vytvořit soubory pro uvedenou tabulku.

Nyní máme v Source Packages (pokud jste nechali defaultní cestu) v nějakém package tyto soubory:

Lide.java a LideController.java, ve kterých uděláme následující úpravy.

Lide.java:

@Id
@Basic(optional = false)
@NotNull
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_clovek")
private Integer id_clovek;

LideController.java:

public String create() {
        try {
            // pro autoincrement
            current.setId_clovek(0);
            
            getFacade().create(current);
            JsfUtil.addSuccessMessage(ResourceBundle.getBundle("labels").getString("DiagnozaCreated"));
            return prepareCreate();
        } catch (Exception e) {
            JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("labels").getString("PersistenceErrorOccured"));
            return null;
        }
    }

Pokud byste použili GenerationType.AUTO (jak se na mnohých fórech dočtete, zejména protože se většina fór zabývá MySQL), dostanete hlášku:

Error: A persistence error occurred. 

Ta znamená, že se databázi něco nelíbí. Výše uvedený kód by měl tento problém odstranit.

Rubrika Tvorba webu | Tagy Java EE, PostgreSQL, Problém, řešení | Ne 06.05.2012 | 1847x

Náhodné články

Tento web jsem zakládal na střední, v roce 2008. Je zde hlavně archiv mé tvorby.

Aktuální věci publikuji kvůli úspoře času na Twitter.

Honza

"Čas je materiál, ze kterého se vyrábí život."

B. Franklin