Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Hibernacja Zapisz dziwne zachowanie

Twoim największym problemem jest nieprawidłowa kolumna w <key> mapowanie - powinno być "user_id", a nie "id". To powiedziawszy, całe twoje mapowanie wydaje mi się trochę dziwne.

Po pierwsze, jeśli chcesz, aby identyfikatory były generowane automatycznie, powinieneś naprawdę pozwolić Hibernate zająć się tym, określając odpowiedni generator:

 <id column="id" name="id">
   <generator class="native"/>
 </id>

Przeczytaj Dokumentację hibernacji na generatorach dla różnych dostępnych opcji.

Po drugie, jeśli wszystko, czego potrzebujesz, to zestaw typów łańcuchów, rozważ ponowne zmapowanie ich na kolekcję elementów, a nie na relację jeden-do-wielu:

 <set name="types" table="types">
    <key column="user_id"/>
    <element column="type" type="string"/>
 </set> 

W ten sposób nie będziesz potrzebować do tego jawnej klasy „Typy” ani mapowania. Nawet jeśli chcesz mieć dodatkowe atrybuty w „Typach”, nadal możesz mapować je jako komponent, a nie encję.

Wreszcie, jeśli „Typy” muszą być encjami ze względu na pewne nieopisane wymagania, relacja między „Użytkownikami” i „Typami” jest dwukierunkowa i musi być zmapowana w następujący sposób:

 <set name="types" table="types" inverse="true">
    <key column="user_id"/>
    <one-to-many class="Types"/>
 </set>

 ...
 in Types mapping:
 <many-to-one name="user" column="user_id" not-null="true"/>

W tym drugim przypadku „Typy” musiałyby mieć właściwość „user” typu „Użytkownicy”.Tu jest szczegółowym przykładem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyświetlaj rekordy z bazy danych MySQL za pomocą JTable w Javie

  2. Nie można połączyć kontenera MySQL z kontenerem Tomcat w docker

  3. Fluent Nhibernate:Nie można utworzyć połączenia bazy danych z MySQL

  4. Utwórz funkcję z opcjonalnymi argumentami w MySQL

  5. Jaki jest najlepszy sposób na sprawdzenie, czy coś istnieje z PDO?