2012-07-09 146 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; 
}