Siden id
feltet er allerede unikt og automatisk forøget, du behøver ikke et sammensat id i dette tilfælde, så din enhed kan se sådan ud:
@Id
@Column(name = "id")
public long getId() {
return id;
}
@Column(name = "subid")
public int getSubid() {
return subid;
}
Enheden kan hentes ved hjælp af id ved hjælp af enhedsadministratoren:
entityManager.find(MyEntity.class, entityId);
eller du kan hente entiteten ved hjælp af en forespørgsel, der tager både id
og 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 har også en SelectGenerator der kan hente id'et fra en databasekolonne, hvilket er nyttigt, når databasen genererer id'et ved hjælp af en trigger.
Desværre virker det ikke med sammensatte id'er, så du visner skrev din egen udvidede SelectGenerator
eller brug en enkelt streng id_sub_id
kolonne, der kombinerer id og sub-id til en enkelt VARCHAR kolonne:
'1-0'
'1-1'
'2-0'
'2-1'
Du skal skrive en databaseudløser for at opdatere de to kolonner ved hjælp af en databasespecifik lagret procedure og aggregere de to kolonner i VARCHAR-en. Du kortlægger derefter den aggregerede kolonne ved hjælp af standard SelectGenerator
til et strengfelt:
@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;
}