Hibernate - problem z id

0

Witam. Mam problem z dodawaniem rekordów do bazy danych.

Oto kod:
//Mam klasę kat
public class kat {
private Long id;
private String nazwa;
//gettery i settery
public Long getId() {
return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getNazwa() {
    return nazwa;
}

public void setNazwa(String nazwa) {
    this.nazwa = nazwa;
}

}// END

Oraz plik mapujący ją: kat.hbm.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-*Hibernate/Hibernate Mapping DTD 3.0*EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="ds"> <class name="kat" table="Category"> <id name="id" column="id_c"><generator class="native" /></id> <property name="nazwa" column="NAME" type="string" not-null="true" /> </class> </hibernate-mapping>

Problem polega na tym że nie mogę zapisać obiektu w bazie:
//Tworzę nowy obiekt kat i chcę go zapisać bazie

kat k=new kat();
k.setNazwa("jakas kategoria");
session.save(k);
...
....
itd

Hibernate wywala błąd:
Kolumna 'CAT_ID' nie akceptuje wartości NULL.

Proszę o pomoc bo nie mogę sobie z tym sama poradzić.

Według mnie klucz ID powinien być generowany automatycznie.

0

Na pierwszy rzut oka wydaje sie ze masz w bazie o jedna kolumne za duzo, i ona jest not-null: id_c jest zmapowane jako klucz prodstawowy, a wyjatek wywala cos o ID_CAT. Sprawdz tabelke.

0

Ok. Dzięki juhuhehej - miałeś rację :)

Już działa dobrze lecz mam inny problem.

Za każdym razem gdy uruchamiam aplikację i dodaję nowy rekord do bazy, zastępuje mi stare.
Myślę że może to być coś z hbm2ddl.auto w pliku hibernate.cfg.xml
Mam ustawione na create, ale próbowałam również update oraz create-drop.
Efekt był taki sam. Być może chodzi o coś innego, np o sposób generowania klucza id (też próbowałam inne sposoby).

Nie wiem co z tym zrobić...pomóżcie proszę...

0

z tego co pamietam hbm2ddl.auto=create zawsze wywoluje skrypt tworzacy baze danych od nowa na starcie aplikacji
jesli chcesz z tego zregyznowac, usun tego propertisa z pliku konfiguracyjnego i juz
pozdro

0

lub zamień na validate wtedy przy starcie zostaną sprawdzone mapowania.

0

Czy możliwe jest aby Hibernate nie korzystał z pliku hibernate.cfg.xml?

Usunęłam ten plik z projektu a Hibernete nie zgłosił wyjątku:
2008-06-27 1806 org.hibernate.cfg.Configuration configure
INFO: configuring from resource: /hibernate.cfg.xml

i utworzył bazę danych...tylko nie wiem skąd wziął klasy POJO.
Utworzył bazę lecz nie do końca taką jakbym chciała. Nie udało sie utworzyć 1 tabeli która powstaje z klasy dziedziczącej z nadklasy. Oto kod:
//klasa nadrzędna
public class klient {

private Long id;
private String imie;
private String nazwisko;
private adres ad;

//gettery i settery
}

//klasa dziedzicząca
public class usr extends klient{
private String login;
private String pswd;
private boolean rules;
//metody get i set
}

a to plik mapujące:
klient.hbm.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-*Hibernate/Hibernate Mapping DTD 3.0*EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="ds"> <class name="klient" table="customer"> <id name="id" type="long" column="id_klient"> <generator class="increment" /> </id> <property name="imie" column="IMIE" type="string" not-null="true" /> <property name="nazwisko" column="NAZWISKO" type="string" not-null="true" /> <many-to-one name="ad" column="adresFK" not-null="true" /> <joined-subclass name="usr" table="USR"> <key column="id" /> <property name="login" column="LOGIN" /> <property name="pswd" column="PSWD" /> <property name="rules" column="RULES" /> </joined-subclass> </class> </hibernate-mapping>

Już mam dość Hibernate, ciągle coś jest nie tak :/
Gdy rozwiążę 1 błąd zaraz powstaje 10 innych :(

0

Jeżeli nie podasz lokacji pliku hibernate.cfg.xml to jest on poszukiwany w classpathie. Może tam gdzieś siedzieć. Pliki odwzorowań podobnie.

Pytanie dlaczego nie używasz adnotacji?

0

Masz racje z classpaht:)

Koziołek napisał(a)

Może tam gdzieś siedzieć. Pliki odwzorowań podobnie.

Pytanie dlaczego nie używasz adnotacji?

A czy to coś zmien??
Wydawało mi sie że tak jest prościej :/

jednak chyba nie jest...nie tworzy mi tabelki z dzedziczenia :(

0

Co do adnotacji to zmienia. Nie musisz już korzystać z plików odwzorowań. Jeżeli MUSISZ coś zmienić to możesz dodać plik odwzorowań dla konkretnej klasy. Wtedy ustawienia z tego pliku nadpiszą te z adnotacji.

Dziedziczenie jest chyba realizowane w ramach pojedynczej tabeli. Sprawdź dokładnie wszelkie konfiguracje.

0

dzięki Koziołek :)
udało mi się w SPACJA końcu stworzyć bazę danych taką jak wynika z klas pojo :) wprawdzie z małą pomocą ale baza jest i działa :)

Myśle że niestety to nie jest koniec moich problemów z hibernate, więc będę pisać tu na forum...

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1