sql >> Database >  >> RDS >> Mysql

Leg gedrag uit bij het in kaart brengen van automatisch geïncrementeerde samengestelde id-reeksen met Hibernate

Sinds de id veld is al uniek en wordt automatisch verhoogd, u heeft in dit geval geen samengestelde id nodig, zodat uw entiteit er als volgt uit kan zien:

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

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

De entiteit kan worden opgehaald op id met behulp van de entiteitsmanager:

entityManager.find(MyEntity.class, entityId); 

of je zou de entiteit kunnen ophalen met behulp van een query die zowel de id en de 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 heeft ook een SelectGenerator die de id uit een databasekolom kan halen, wat handig is wanneer de database de id genereert met behulp van een trigger.

Helaas werkt het niet met samengestelde id's, dus je schreef je eigen uitgebreide SelectGenerator of gebruik een enkele string id_sub_id kolom die de id en sub-id combineert in een enkele VARCHAR-kolom:

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

U moet een databasetrigger schrijven om de twee kolommen bij te werken met behulp van een databasespecifieke opgeslagen procedure en de twee kolommen samenvoegen tot de VARCHAR-kolom. Vervolgens brengt u de geaggregeerde kolom in kaart met behulp van de standaard SelectGenerator naar een String-veld:

@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. Hoe u SQL Server-taken migreert van de ene SQL Server-instantie naar de andere?

  2. MySQL CHECK beperking alternatief

  3. 2 manieren om dubbele rijen in Oracle te verwijderen

  4. SQL-updatequery met behulp van joins