2.1 Anteckning @Entity, @Table
Om du vill mappa din klass till en tabell i databasen måste du lägga till så många som 3 kommentarer till den.
Först måste du lägga till en kommentar till klassen @Entity
. Den här anteckningen framför klassen kommer att berätta för Hibernate att detta inte bara är en klass, utan en speciell klass vars objekt måste lagras i databasen.
Exempel:
@Entity
class User {
public int id;
public String name;
public int level;
public Date createdDate;
}
Detta räcker för att Hibernate ska behandla objekt av denna klass på ett speciellt sätt.
Den andra anteckningen är @Table
. Med dess hjälp kan du ställa in namnet på tabellen i databasen som denna klass kommer att associeras med. Exempel:
@Entity
@Table(name="user")
class User {
public int id;
public String name;
public int level;
public Date createdDate;
}
Om klassnamnet och tabellnamnet är samma, @Table
kan anteckningen utelämnas.
Dessutom, om din applikation fungerar med tabeller från flera scheman samtidigt, måste du ange i vilket särskilt schema tabellen finns:
@Entity
@Table(name="user", schema="test")
class User {
public int id;
public String name;
public int level;
public Date createdDate;
}
Ja, allt är så enkelt som det verkar.
2.2 @Kolumnkommentar
Det andra viktiga att veta är mappningen av tabellkolumner till klassfält. I den enklaste versionen mappar Hibernate helt enkelt fälten i din enhetsklass till kolumnerna i den önskade tabellen.
Om du vill kontrollera alla nyanser av kartläggning kan du använda anteckningen @Column
. Exempel:
@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;
}
Kommentaren @Column
har olika parametrar, nedan kommer vi att överväga de mest populära av dem:
# | Attributnamn | Attributtyp | Beskrivning |
---|---|---|---|
1 | namn | Sträng | Ställer in tabellkolumnnamnet för klassfältet |
2 | unik | booleskt | Alla fältvärden måste vara unika |
3 | nullbar | booleskt | Fältet kan vara null |
4 | längd | int | Maximal längd (för strängar) |
Låt oss lägga till några begränsningar för fälten i vår User Entity-klass:
- användarnamnet måste vara unikt och inte längre än 100 tecken
- nivå kan vara noll
- createDate kan inte vara null
Då blir våra kommentarer:
@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;
}
Du kan skapa ett objekt av typen User och till och med tilldela alla nollfält till det, men när du försöker spara det i databasen kommer Hibernate att utföra en kontroll och om några begränsningar överträds kommer ett undantag att kastas.
2.3 @Id-anteckning
Och ytterligare en viktig kommentar är @Id
. Den kan användas för att ställa in primärnyckeln för en tabell.
Du behöver bara ange denna anteckning för det önskade fältet - och Hibernate kommer att göra allt själv:
@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;
}
Om du vill att Hibernate självständigt ska generera ID:n för dina objekt när du lägger till dem i databasen, måste du lägga till ytterligare en anteckning - @GeneratedValue
. Då skulle vårt exempel se ut så här:
@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;
}
Vi har utelämnat anteckningen @Column
för id- fältet här, eftersom det inte innehåller värdefull information - fältnamnet och kolumnnamnet i tabellen är desamma, och tack vare resten av anteckningarna förstår Hibernate redan att vi pratar om en tabell kolumn.
GO TO FULL VERSION