Mysql
 sql >> база данни >  >> RDS >> Mysql

Обяснете поведението при картографиране на автоматично увеличена съставна идентификационна последователност с Hibernate

Тъй като id полето вече е уникално и се увеличава автоматично, в този случай нямате нужда от съставен идентификатор, за да може вашият обект да изглежда така:

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

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

Обектът може да бъде извлечен чрез идентификатор с помощта на мениджъра на обекти:

entityManager.find(MyEntity.class, entityId); 

или можете да извлечете обекта с помощта на заявка, която приема и двата id и 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 също има SelectGenerator който може да извлече идентификатора от колона на база данни, което е полезно, когато базата данни генерира идентификатора с помощта на тригер.

За съжаление, не работи със съставни идентификатори, така че вие ​​сте написали свой собствен разширен SelectGenerator или използвайте един низ id_sub_id колона, която комбинира id и sub-id в една колона VARCHAR:

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

Трябва да напишете тригер за база данни, за да актуализирате двете колони, като използвате специфична за базата данни съхранена процедура и да агрегирате двете колони в една VARCHAR. След това картографирате агрегираната колона, като използвате стандартния SelectGenerator към поле String:

@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. MySQL срещу MariaDB

  2. PHP конвертира дата и час в секунди

  3. Какво да наблюдавате в MySQL 8.0

  4. Грешка в MySQL 1153 – Получих пакет, по-голям от байтове „max_allowed_packet“

  5. Custom Query Pagination Cakephp