Ich habe eine einfache Klasse wie folgt annotiert:
Code:
@javax.persistence.Entity
public class User implements IsSerializable {
@javax.persistence.Id
@javax.persistence.GeneratedValue( strategy = javax.persistence.GenerationType.IDENTITY )
public long id;
@javax.persistence.Column(length=80,nullable=false,unique=true)
@org.hibernate.annotations.Index(name="email")
public String email;
@javax.persistence.Column(length=70,nullable=false)
public String username;
@javax.persistence.Column(length=70,nullable=false)
public String password;
public User() {}
public User( String username, String password ) {
this.username = username;
this.password = password;
}
...der Rest kommt hier...
Da ich MySQL benutze sieht das Ergebnis wie folgt aus:
Code:
mysql> describe User;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| email | varchar(80) | NO | UNI | NULL | |
| password | varchar(70) | NO | | NULL | |
| username | varchar(70) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
Ist die Spalte "email" nun indiziert oder nicht? Also ist die Tabelle äquivalent zu einer Tabelle die ich mit folgendem SQL Befehl erstellt hätte:
create table User (id INT UNSIGNED NOT NULL AUTO_INCREMENT, username VARCHAR(70) NOT NULL, password VARCHAR(70) NOT NULL, email VARCHAR(80) NOT NULL, PRIMARY KEY(id), INDEX( email(10) ) );
Desweiteren: Wenn email indiziert wird, wieviele Stellen des varchar-Feldes werden denn dann indiziert? In meinem SQL-Befehl direkt sind es ja 10 Zeichen.