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

Wyjaśnij zachowania w mapowaniu automatycznie zwiększanej złożonej sekwencji identyfikatorów za pomocą Hibernate

Ponieważ id pole jest już unikalne i automatycznie zwiększane, w tym przypadku nie potrzebujesz złożonego identyfikatora, aby Twoja jednostka mogła wyglądać tak:

@Id
@Column(name = "id")
public long getId() {
    return id;
}

@Column(name = "subid")
public int getSubid() {
    return subid;
}

Encję można pobrać za pomocą identyfikatora za pomocą menedżera encji:

entityManager.find(MyEntity.class, entityId); 

lub możesz pobrać encję za pomocą zapytania, które pobiera oba id i subid :

MyEntity myEntity = entityManager.createTypeQuery("select me from MyEntity where id = :id and subid = :subid", MyEntity.class)
    .setParameter("id", entityId) 
    .setParameter("subid", entitySubId) 
    .getSingleResult();

Hibernate ma również SelectGenerator które mogą pobrać identyfikator z kolumny bazy danych, co jest przydatne, gdy baza danych generuje identyfikator za pomocą wyzwalacza.

Niestety nie działa ze złożonymi identyfikatorami, więc napisałeś swój własny rozszerzony SelectGenerator lub użyj pojedynczego ciągu id_sub_id kolumna, która łączy id i sub-id w jedną kolumnę VARCHAR:

'1-0'
'1-1'
'2-0'
'2-1' 

Musisz napisać wyzwalacz bazy danych, aby zaktualizować dwie kolumny przy użyciu procedury składowanej specyficznej dla bazy danych i zagregować dwie kolumny w jedną VARCHAR. Następnie mapujesz zagregowaną kolumnę za pomocą standardowego SelectGenerator do pola tekstowego:

@Id
@Column(name = "id_sub_id")
@GeneratedValue( strategy = "trigger" )
@GenericGenerator( 
    name="trigger", strategy="org.hibernate.id.SelectGenerator",
    parameters = {
        @Parameter( name="keys", value="id_sub_id" )
    }
)
public String getId() {
    return id;
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Odmowa dostępu dla użytkownika „root”@„localhost”

  2. Jak liczyć przedmioty według kategorii?

  3. Zrozumienie indeksów wielu kolumn w zapytaniu MySQL

  4. MySQL:Jak wielokrotnie dołączać do tego samego stołu?

  5. Jak przekonwertować wszystkie tabele z MyISAM do InnoDB?