2012-07-09 1 views
1

Je dois définir un incrément automatique pour un champ de ma table.Incrément automatique avec mise en veille prolongée

Ceci est ma classe d'entité:

@Entity 
@Table(name = "UserLogin") 
public class User implements Serializable { 

private int id; 
private String username; 
private String password; 
private String fname; 
private String lname; 
private String emailId; 
private boolean loginperson; 
private String manager; 

@Id 
@GeneratedValue 
@Column(name = "empolyeeId") 
public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

@Column(name = "username", nullable = false) 
public String getUsername() { 
    return username; 
} 

public void setUsername(String username) { 
    this.username = username; 
} 

@Column(name = "password", nullable = false) 
public String getPassword() { 
    return password; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 

@Column(name = "firstName", nullable = false) 
public String getFname() { 
    return fname; 
} 

public void setFname(String fname) { 
    this.fname = fname; 
} 

@Column(name = "lastName", nullable = false) 
public String getLname() { 
    return lname; 
} 

public void setLname(String lname) { 
    this.lname = lname; 
} 

@Column(name = "emailId", nullable = false) 
public void setEmailId(String emailId) { 
    this.emailId = emailId; 
} 

public void setManager(String manager) { 
    this.manager = manager; 
} 

@Column(name = "loginperson", nullable = false) 
public boolean isLoginperson() { 
    return loginperson; 
} 

public void setLoginperson(boolean loginperson) { 
    this.loginperson = loginperson; 
} 

@Column(name = "manager", nullable = false) 
public String getManager() { 
    return manager; 
} 

public String getEmailId() { 
    return emailId; 
} 

Ici, je ne suis pas en mesure ont mis en valeur générée pour l'id field.But il ne crée pas la l'augmentation automatique du champ id.

J'ai essayé avec

@GeneratedValue(strategy=GenerationType.AUTO) 

et

@GeneratedValue(strategy=GenerationType.IDENTITY) 

Mais la table ne se crée dans la base de données MySQL.

Je reçois le journal suivant.

ERROR: org.hibernate.tool.hbm2ddl.SchemaExport - Unsuccessful: create table UserLogin (empolyeeId integer generated by default as identity (start with 1), emailId varchar(255), firstName varchar(255) not null, lastName varchar(255) not null, loginperson bit not null, manager varchar(255) not null, password varchar(255) not null, username varchar(255) not null, primary key (empolyeeId)) 
    ERROR: org.hibernate.tool.hbm2ddl.SchemaExport - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'generated by default as identity (start with 1), emailId varchar(255), firstName' at line 1 

Répondre

3

Essayez d'utiliser ces lignes pour votre ID:

@Id 
@GenericGenerator(name="gen",strategy="increment") 
@GeneratedValue(generator="gen") 
@Column(name = "ID", unique = true, nullable = false, precision = 15, scale = 0) 
private Long id; 


Il est préférable d'utiliser Long, mais si vous insistez à l'aide int, changer simplement le type int.

2

Vérifiez fichier persistence.xml pour ce que le dialecte DB est réglé sur et changer pour:

<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> 

et essayer. J'ai eu un problème similaire et cela l'a corrigé.

1
@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
@Column(name = "empolyeeId") 
private int id; 
1

La meilleure façon de le faire est de créer d'abord une séquence dans votre base de données et l'assigner à votre entité comme indiqué ci-dessous -

@Entity 
@Table(name = "UserLogin") 
@SequenceGenerator(name="loginSeq", sequenceName="SEQ_LOGIN", allocationSize=1) 
public class User implements Serializable { 

Ensuite, utilisez cette séquence pour incrémentation automatique comme indiqué ci-dessous -

@Id 
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "loginSeq") 
@Column(name = "empolyeeId") 
public int getId() { 
return id; 
} 
Questions connexes