Primärschlüssel

Verfügbar

@Id-Anmerkung

Jede Entity-Entität in Hibernate muss über ein Feld verfügen, das als Primärschlüssel dient: Es enthält einen eindeutigen Wert für alle Objekte dieser Klasse. Normalerweise wird dieses Feld mit der Annotation @Id versehen .

Generelle Form:

@Id
Class Name;

Beispiel:

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

   @Embedded
   public UserAddress address;

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

Platzierung von Anmerkungen

Übrigens können Sie @Column- Annotationen nicht nur für Felder schreiben, sondern auch für Methoden: für Getter oder Setter. Beispiel:

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

Dieser Ansatz entstand, als Annotationen nicht nur zu Klassen, sondern auch zu Schnittstellen hinzugefügt wurden. Die Schnittstelle verfügt über keine Klassenfelder, aber es gibt Methoden: Getter und Setter. Hibernate unterstützt beide Standards.

Wichtig! Wenn eine Klasse die Annotation @Entity hat , werden alle ihre Felder von Hibernate als persistente Felder behandelt (es sei denn, sie haben die Annotation @Transient angegeben ). Auch wenn die Felder überhaupt keine Anmerkungen haben: In diesem Fall wird der Spaltenname als gleich dem Klassenfeldnamen betrachtet.

Hier spielt die @Id- Annotation eine wichtige Rolle. Wenn die Anmerkung in einem Klassenfeld platziert wird, prüft Hibernate die Namen und Typen der Felder. Wenn die @Id- Annotation auf einer Methode platziert wird, prüft Hibernate die Namen und Typen der Methoden.

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

}

Beispiel 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

Sie können Ihren neuen Objekten selbst eine ID zuweisen oder sie Hibernate überlassen. Damit Hibernate besser versteht, wie Sie Ihren Objekten IDs zuweisen, gibt es eine spezielle Anmerkung:

@GeneratedValue

Diese Annotation markiert normalerweise dasselbe Feld wie die @Id- Annotation . Sie hat 4 mögliche ID-Zuweisungsstrategien:

  • AUTO
  • IDENTITÄT
  • REIHENFOLGE
  • TISCH

Ein Beispiel für eine Annotation mit der angegebenen Strategie:

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

    public Date createdDate;
}

Wenn kein Richtlinienwert angegeben ist, wird die AUTO-Strategie ausgewählt. Die AUTO-Strategie bedeutet, dass Hibernate die ID selbst zuweist, hauptsächlich basierend auf dem Datentyp des ID-Felds.

Warum auf Typ? Ja, da ID-Typen sehr unterschiedlich sein können, beispielsweise String oder GUID. Beispiel:

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

    public Date createdDate;
}

Hinweis: Historisch gesehen wird eine GUID in Java als UUID bezeichnet. Und Hibernate kann auf Wunsch eindeutige UUIDs für Ihre Objekte generieren.

Verschiedene @GeneratedValue-Strategien

Wenn Sie den Typ GeneratedValue(strategy = GenerationType.IDENTITY) angeben , delegiert Hibernate die ID-Einstellung an die Datenbankebene. Normalerweise wird hierfür eine Spalte mit der Bezeichnung PRIMARY KEY, AUTOINCREMENT verwendet.

Wenn Sie jedoch möchten, dass Ihre IDs eindeutig sind und nach einem speziell festgelegten Algorithmus generiert werden, können Sie die Annotation GeneratedValue(strategy = GenerationType.SEQUENCE) verwenden , zum Beispiel:

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

	// ...
}

Es gibt viele weitere Möglichkeiten, eine ID zu generieren. Beispielsweise verfügen Sie möglicherweise über einen zusammengesetzten eindeutigen Schlüssel, der aus mehreren Spalten besteht. Und wenn Sie ein Objekt in die Datenbank schreiben, müssen Sie alle diese Spalten ausfüllen.

Ich werde sie nicht im Detail wiedergeben. Der Zweck unserer Vorträge besteht jedoch darin, Hibernate kennenzulernen und nicht die offizielle Dokumentation nachzuerzählen.

Kommentare
  • Beliebt
  • Neu
  • Alt
Du musst angemeldet sein, um einen Kommentar schreiben zu können
Auf dieser Seite gibt es noch keine Kommentare