2.1 Annotatie @Entity, @Table
Als u uw klas wilt toewijzen aan een tabel in de database, dan moet u hiervoor maximaal 3 annotaties toevoegen.
Eerst moet je een annotatie aan de klas toevoegen @Entity
. Deze annotatie voor de klasse vertelt Hibernate dat dit niet zomaar een klasse is, maar een speciale klasse waarvan de objecten in de database moeten worden opgeslagen.
Voorbeeld:
@Entity
class User {
public int id;
public String name;
public int level;
public Date createdDate;
}
Dit is genoeg voor Hibernate om objecten van deze klasse op een speciale manier te behandelen.
De tweede annotatie is @Table
. Met zijn hulp kunt u de naam van de tabel in de database instellen waaraan deze klasse zal worden gekoppeld. Voorbeeld:
@Entity
@Table(name="user")
class User {
public int id;
public String name;
public int level;
public Date createdDate;
}
Als de klassenaam en de tabelnaam hetzelfde zijn, @Table
kan de annotatie worden weggelaten.
Als uw toepassing tegelijkertijd met tabellen uit verschillende schema's werkt, moet u ook specificeren in welk specifiek schema de tabel zich bevindt:
@Entity
@Table(name="user", schema="test")
class User {
public int id;
public String name;
public int level;
public Date createdDate;
}
Ja, alles is zo eenvoudig als het lijkt.
2.2 @Column-annotatie
Het tweede belangrijke ding om te weten is de toewijzing van tabelkolommen aan klassevelden. In de eenvoudigste versie wijst Hibernate eenvoudigweg de velden van uw entiteitsklasse toe aan de kolommen van de gewenste tabel.
Als u alle nuances van mapping wilt beheersen, kunt u de annotatie gebruiken @Column
. Voorbeeld:
@Entity
@Table(name="user")
class User {
@Column(name="id")
public Integer id;
@Column(name="name")
public String name;
@Column(name="level")
public Integer level;
@Column(name="created_date")
public Date createdDate;
}
De annotatie @Column
heeft verschillende parameters, hieronder zullen we de meest populaire bekijken:
# | Attribuut naam | Attribuut type | Beschrijving |
---|---|---|---|
1 | naam | Snaar | Stelt de tabelkolomnaam in voor het klassenveld |
2 | uniek | booleaans | Alle veldwaarden moeten uniek zijn |
3 | nulbaar | booleaans | Het veld kan null zijn |
4 | lengte | int | Maximale lengte (voor snaren) |
Laten we enkele beperkingen toevoegen aan de velden van onze User Entity-klasse:
- gebruikersnaam moet uniek zijn en mag niet langer zijn dan 100 tekens
- niveau kan nul zijn
- createDate kan niet null zijn
Dan worden onze annotaties:
@Entity
@Table(name="user")
class User {
@Column(name="id")
public Integer id;
@Column(name="name", unique=true, length=100)
public String name;
@Column(name="level", nullable=true)
public Integer level;
@Column(name="created_date", nullable=false)
public Date createdDate;
}
U kunt een object van het type Gebruiker maken en er zelfs alle null- velden aan toewijzen, maar wanneer u het in de database probeert op te slaan, voert Hibernate een controle uit en als er beperkingen worden overtreden, wordt er een uitzondering gegenereerd.
2.3 @Id-annotatie
En nog een belangrijke annotatie is @Id
. Het kan worden gebruikt om de primaire sleutel voor een tabel in te stellen.
U hoeft alleen deze annotatie voor het gewenste veld op te geven - en Hibernate doet alles zelf:
@Entity
@Table(name="user")
class User {
@Id
@Column(name="id")
public Integer id;
@Column(name="name")
public String name;
@Column(name="level")
public Integer level;
@Column(name="created_date")
public Date createdDate;
}
Als u wilt dat Hibernate onafhankelijk de ID's van uw objecten genereert wanneer u ze aan de database toevoegt, moet u nog een annotatie toevoegen - @GeneratedValue
. Dan ziet ons voorbeeld er zo uit:
@Entity
@Table(name="user")
class User {
@Id
@GeneratedValue
public Integer id;
@Column(name="name")
public String name;
@Column(name="level")
public Integer level;
@Column(name="created_date")
public Date createdDate;
}
We hebben de annotatie @Column
voor het id- veld hier weggelaten, omdat het geen waardevolle informatie bevat - de veldnaam en kolomnaam in de tabel zijn hetzelfde, en dankzij de rest van de annotaties begrijpt Hibernate al dat we het over een tabel hebben kolom.
GO TO FULL VERSION