primærnøgle

Ledig

@Id-anmærkning

Hver Entity-entitet i Hibernate skal have et felt, der vil være den primære nøgle: det indeholder en unik værdi for alle objekter i denne klasse. Typisk er dette felt kommenteret med @Id -annotationen .

Generel form:

@Id
Class Name;

Eksempel:

@Entity
@Table(name="user")
class User
{
   @Id
   @Column(name="id")
   public Integer id;

   @Embedded
   public UserAddress address;

   @Column(name="created_date")
   public Date createdDate;
}

Anmærkningsplacering

Forresten kan du skrive @Column- annoteringer ikke kun til felter, men også til metoder: for getters eller settere. Eksempel:

@Entity
@Table(name="user")
class User
{
    public Integer id;
    public Date createdDate;

   @Id
   @Column(name="id")
   public Integer getId() {
   	return this.id;
   }
   public void setId(Integer id)    {
  	this.id = id;
   }

   @Column(name="created_date")
   public Date getDate() {
  	return this.createdDate;
   }
   public void setCreatedDate(Date date) {
      this. createdDate = date;
   }
}

Denne tilgang dukkede op, da annoteringer begyndte at blive tilføjet ikke kun til klasser, men også til grænseflader. Grænsefladen har ikke klassefelter, men der er metoder: getters og settere. Hibernate understøtter begge disse standarder.

Vigtig! Hvis en klasse har @Entity- annotationen , behandles alle dens felter af Hibernate som vedvarende felter (medmindre de har @Transient- annotationen angivet ). Selvom felterne slet ikke har nogen anmærkninger: i dette tilfælde anses kolonnenavnet for at være lig med klassens feltnavn.

Det er her @Id -annotationen spiller en vigtig rolle. Hvis annoteringen er placeret på et klassefelt, vil Hibernate se på navnene og typerne af felterne. Hvis @Id- annotationen er placeret på en metode, vil Hibernate se på navnene og typerne af metoderne.

Eksempel 1:

@Entity
@Table(name="user")
class User
{
   @Id
    public Integer id;
    public Date createdDate;  //this field will be treated as if it had @Column(name=" createdDate ")

}

Eksempel 2:

@Entity
@Table(name="user")
class User
{
    public Integer id;
    public Date createdDate;

   @Id
   public Integer getId() {
   	return this.id;
   }
   public void setId(Integer id)    {
  	this.id = id;
   }

   public Date getDate() { //this field will be treated as if it had @Column(name=”date ”)
  	return this.createdDate;
   }
   public void setCreatedDate(Date date) {
  	this. createdDate = date;
   }

}

@GeneratedValue annotation

Du kan selv tildele et id til dine nye objekter eller overlade det til Hibernates nåde. For at Hibernate bedre kan forstå, hvordan man tildeler id'er til dine objekter, har den en særlig anmærkning:

@GeneratedValue

Denne annotation markerer normalt det samme felt som @Id -annotationen . Hun har 4 mulige ID-tildelingsstrategier:

  • AUTO
  • IDENTITET
  • SEKVENS
  • BORD

Et eksempel på en annotering med den angivne strategi:

@Entity
@Table(name="user")
class User
{
    @Id
	@GeneratedValue(strategy = GenerationType.AUTO)
    public Integer id;

    public Date createdDate;
}

Hvis der ikke er angivet en politikværdi, vælges AUTO-strategien. AUTO-strategien betyder, at Hibernate tildeler selve ID'et, primært baseret på datatypen i ID-feltet.

Hvorfor på type? Ja, fordi ID-typer kan være meget forskellige, for eksempel String eller GUID. Eksempel:

@Entity
@Table(name="user")
class User
{
    @Id
	@GeneratedValue
    public UUID id;

    public Date createdDate;
}

Bemærk: En GUID i Java kaldes historisk set en UUID. Og Hibernate kan generere unikke UUID'er til dine objekter, hvis du beder det om det.

Forskellige @GeneratedValue-strategier

Hvis du angiver typen GeneratedValue(strategy = GenerationType.IDENTITY) , så uddelegerer Hibernate ID-indstillingen til databaselaget. Dette bruger typisk en kolonne mærket PRIMÆR NØGLE, AUTOINCREMENT.

Men hvis du ønsker, at dine id'er skal være unikke og genereres i henhold til en specielt specificeret algoritme, så kan du bruge GeneratedValue (strategy = GenerationType.SEQUENCE) annotationen , for eksempel:

@Entity
@Table(name="user")
public class User {
	@Id
	@GeneratedValue(generator = "sequence-generator")
	@GenericGenerator(
  	name = "sequence-generator",
  	strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
  	parameters = {
    	@Parameter(name = "sequence_name", value = "user_sequence"),
    	@Parameter(name = "initial_value", value = "4"),
    	@Parameter(name = "increment_size", value = "1")
    	}
	)
	private long userId;

	// ...
}

Der er mange flere måder at generere et ID på. For eksempel kan du have en sammensat unik nøgle, der består af flere kolonner. Og når du skriver et objekt til databasen, skal du udfylde alle disse kolonner.

Jeg vil ikke give dem i detaljer. Alligevel er formålet med vores foredrag at stifte bekendtskab med Hibernate, og ikke at genfortælle den officielle dokumentation.

Kommentarer
  • Populær
  • Ny
  • Gammel
Du skal være logget ind for at skrive en kommentar
Denne side har ingen kommentarer endnu