Reputation: 6271
I need to set a auto increment for a field in my table.
This is my Entity class:
@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;
}
Here I am not able have set Generated value for the id field.But it is not creating the the auto increment for the id field.
I have tried with
@GeneratedValue(strategy=GenerationType.AUTO)
and
@GeneratedValue(strategy=GenerationType.IDENTITY)
But the table is not getting created in mysql database.
I am getting the following log.
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
Upvotes: 1
Views: 19973
Reputation: 2467
Check persistence.xml file for what the DB dialect is set to and change it to:
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
and try. I had similar problem and this fixed it.
Upvotes: 2
Reputation: 8014
Best way to do so is First create a sequence in your database and assign it to your entity as shown below -
@Entity
@Table(name = "UserLogin")
@SequenceGenerator(name="loginSeq", sequenceName="SEQ_LOGIN", allocationSize=1)
public class User implements Serializable {
Then use this sequence to auto increment as shown below -
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "loginSeq")
@Column(name = "empolyeeId")
public int getId() {
return id;
}
Upvotes: 1
Reputation: 5390
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "empolyeeId")
private int id;
Upvotes: 1
Reputation: 5178
Try using these lines for your ID:
@Id
@GenericGenerator(name="gen",strategy="increment")
@GeneratedValue(generator="gen")
@Column(name = "ID", unique = true, nullable = false, precision = 15, scale = 0)
private Long id;
It's better to use Long, but if you insist using int, simply change the type to int.
Upvotes: 4