2012-07-09 145 views
1

我需要为我的表中的字段设置自动增量。自动增量与休眠

这是我的实体类:

@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; 
} 

在这里,我不能都设置生成的值的ID field.But它不创造id字段的自动增量。

我试图与

@GeneratedValue(strategy=GenerationType.AUTO) 

@GeneratedValue(strategy=GenerationType.IDENTITY) 

但不是在mysql数据库得到创建表。

我收到以下日志。

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 

回答

3

尝试使用这些线路为您的ID:

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


这是更好地使用长,但如果你坚持使用INT,只需更改为int类型。

2

检查persistence.xml文件什么的DB方言设置为,更改为:

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

和尝试。我有类似的问题,这解决了它。这样做

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

最好的办法是先在你的数据库中创建序列,并将其分配给您的实体,如下图所示 -

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

然后用这个顺序自动增量如下 -

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