primärnyckel

Tillgängliga

@Id-anteckning

Varje Entity-entitet i Hibernate måste ha ett fält som kommer att vara primärnyckeln: det innehåller ett unikt värde för alla objekt i den här klassen. Vanligtvis är det här fältet kommenterat med @Id -kommentaren .

Allmän form:

@Id
Class Name;

Exempel:

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

   @Embedded
   public UserAddress address;

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

Anteckningsplacering

Förresten, du kan skriva @Column- kommentarer inte bara för fält, utan också för metoder: för getters eller setters. Exempel:

@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;
   }
}

Detta tillvägagångssätt dök upp när anteckningar började läggas till inte bara till klasser utan också till gränssnitt. Gränssnittet har inga klassfält, men det finns metoder: getters och setters. Hibernate stöder båda dessa standarder.

Viktig! Om en klass har @Entity- anteckningen behandlas alla dess fält av Hibernate som beständiga fält (såvida de inte har @Transient- anteckningen specificerad ). Även om fälten inte har några anteckningar alls: i det här fallet anses kolumnnamnet vara lika med klassens fältnamn.

Det är här @Id -kommentaren spelar en viktig roll. Om anteckningen placeras på ett klassfält, kommer Hibernate att titta på namnen och typerna av fälten. Om @Id -kommentaren placeras på en metod, kommer Hibernate att titta på namnen och typerna av metoderna.

Exempel 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 ")

}

Exempel 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-anteckning

Du kan tilldela ett ID till dina nya objekt själv, eller lämna det på Hibernates nåd. För att Hibernate bättre ska förstå hur man tilldelar ID:n till dina objekt, har den en speciell anteckning:

@GeneratedValue

Den här kommentaren markerar vanligtvis samma fält som @Id -kommentaren . Hon har fyra möjliga ID-tilldelningsstrategier:

  • BIL
  • IDENTITET
  • SEKVENS
  • TABELL

Ett exempel på en anteckning med den angivna strategin:

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

    public Date createdDate;
}

Om inget policyvärde anges kommer AUTO-strategin att väljas. AUTO-strategin innebär att Hibernate tilldelar själva ID:t, främst baserat på datatypen för ID-fältet.

Varför på typ? Ja, eftersom ID-typer kan vara väldigt olika, till exempel String eller GUID. Exempel:

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

    public Date createdDate;
}

Obs: En GUID i Java kallas ett UUID, historiskt sett. Och Hibernate kan generera unika UUID för dina objekt om du ber om det.

Olika @GeneratedValue-strategier

Om du anger typen GeneratedValue(strategy = GenerationType.IDENTITY) delegerar Hibernate ID-inställningen till databaslagret. Vanligtvis använder detta en kolumn märkt PRIMARY KEY, AUTOINCREMENT.

Men om du vill att dina ID:n ska vara unika och genereras enligt en speciellt specificerad algoritm, kan du använda anteckningen GeneratedValue(strategy = GenerationType.SEQUENCE), till exempel:

@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;

	// ...
}

Det finns många fler sätt att skapa ett ID. Till exempel kan du ha en sammansatt unik nyckel som består av flera kolumner. Och när du skriver ett objekt till databasen måste du fylla i alla dessa kolumner.

Jag kommer inte att ge dem i detalj. Ändå är syftet med våra föreläsningar att bekanta sig med Hibernate, och inte att återberätta den officiella dokumentationen.

Kommentarer
  • Populär
  • Ny
  • Gammal
Du måste vara inloggad för att lämna en kommentar
Den här sidan har inga kommentarer än