elsődleges kulcs

Elérhető

@Id megjegyzés

Minden hibernált entitásnak rendelkeznie kell egy mezővel, amely az elsődleges kulcs lesz: egyedi értéket tartalmaz az osztály összes objektumához. Ez a mező általában az @Id megjegyzéssel van ellátva .

Általános forma:

@Id
Class Name;

Példa:

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

   @Embedded
   public UserAddress address;

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

Annotáció elhelyezése

Amúgy nem csak mezőkhöz, hanem metódusokhoz is írhatunk @Column annotációkat: getterekhez vagy setterekhez. Példa:

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

Ez a megközelítés akkor jelent meg, amikor nemcsak az osztályokhoz, hanem az interfészekhez is annotációkat kezdtek hozzáadni. A felületen nincsenek osztálymezők, de vannak metódusok: getterek és setterek. A Hibernate mindkét szabványt támogatja.

Fontos! Ha egy osztály rendelkezik @Entity annotációval , akkor a Hibernate az összes mezőjét állandó mezőként kezeli (hacsak nincs megadva a @Transient annotáció ). Még akkor is, ha a mezőkben egyáltalán nincsenek megjegyzések: ebben az esetben az oszlopnév megegyezik az osztálymező nevével.

Itt játszik fontos szerepet az @Id annotáció. Ha a megjegyzés egy osztálymezőn van elhelyezve, akkor a Hibernate megnézi a mezők nevét és típusát. Ha az @Id megjegyzést elhelyezik egy metóduson, akkor a Hibernate megnézi a metódusok nevét és típusát.

1. példa:

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

}

2. példa:

@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 megjegyzés

Új objektumaihoz saját maga is hozzárendelhet azonosítót, vagy a Hibernate kegyére hagyhatja. Annak érdekében, hogy a Hibernate jobban megértse, hogyan rendelhet azonosítókat az objektumokhoz, van egy speciális megjegyzés:

@GeneratedValue

Ez a megjegyzés általában ugyanazt a mezőt jelöli, mint az @Id megjegyzés . 4 lehetséges azonosító-hozzárendelési stratégiája van:

  • AUTO
  • IDENTITÁS
  • SORREND
  • ASZTAL

Példa egy megjegyzésre a megadott stratégiával:

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

    public Date createdDate;
}

Ha nincs megadva házirend érték, akkor az AUTO stratégia kerül kiválasztásra. Az AUTO stratégia azt jelenti, hogy a Hibernate magát az azonosítót rendeli hozzá, elsősorban az ID mező adattípusa alapján.

Miért típuson? Igen, mert az azonosító típusok nagyon eltérőek lehetnek, például String vagy GUID. Példa:

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

    public Date createdDate;
}

Megjegyzés: A Java GUID-jét történelmileg UUID-nek hívják. A Hibernate pedig egyedi UUID-ket generálhat az objektumaihoz, ha Ön kéri.

Különféle @GeneratedValue stratégiák

Ha a GeneratedValue(strategy = GenerationType.IDENTITY) típust adja meg , akkor a Hibernate az azonosító beállítását az adatbázisrétegre delegálja. Ez általában a PRIMARY KEY, AUTOINCREMENT feliratú oszlopot használja.

De ha azt szeretné, hogy az azonosítók egyediek legyenek, és egy speciálisan meghatározott algoritmus szerint legyenek előállítva, akkor használhatja a GeneratedValue(strategy = GenerationType.SEQUENCE) megjegyzést , például:

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

	// ...
}

Az azonosító létrehozásának számos módja van. Például lehet egy összetett egyedi kulcsa, amely több oszlopból áll. És amikor objektumot ír az adatbázisba, ezeket az oszlopokat ki kell töltenie.

Nem részletezem őket. Előadásaink célja mégis a Hibernate megismerése, nem pedig a hivatalos dokumentáció újramesélése.

Hozzászólások
  • Népszerű
  • Új
  • Régi
Hozzászólás írásához be kell jelentkeznie
Ennek az oldalnak még nincsenek megjegyzései