Java JPA正在为我的INT字段创建一个VARCHAR列
各位, 目前,我正试图根据我的类规范创建一个表,但得到一个错误,即“列'ID'的列说明符不正确”。这是因为我的ID字段是VARCHAR(255)并且具有自动增量,如以下错误中所示:Java JPA正在为我的INT字段创建一个VARCHAR列,java,mysql,jpa,Java,Mysql,Jpa,各位, 目前,我正试图根据我的类规范创建一个表,但得到一个错误,即“列'ID'的列说明符不正确”。这是因为我的ID字段是VARCHAR(255)并且具有自动增量,如以下错误中所示: Error executing: CREATE TABLE gameuserstate (ID VARCHAR(255) AUTO_INCREMENT NOT NULL, ADDRESS VARCHAR(255), CITY VARCHAR(255), DOCUMENTID VARCHAR(255), FBUSERI
Error executing: CREATE TABLE gameuserstate (ID VARCHAR(255) AUTO_INCREMENT NOT NULL, ADDRESS VARCHAR(255), CITY VARCHAR(255), DOCUMENTID VARCHAR(255), FBUSERID VARCHAR(255), IDENTIFIER VARCHAR(255), LASTNAME VARCHAR(255), NAME VARCHAR(255), PASSWORD VARCHAR(255), STATE VARCHAR(255), USERSTATE LONGTEXT, USERID VARCHAR(255), ZIPCODE VARCHAR(255), PRIMARY KEY (ID))
问题是:我的类的ID字段类型是INT!
JPA怎么可能使用VARCHAR(255)字段来表示int
这是我的实体类:
@Table(name = "gameuserstate")
@Cacheable(false)
@Entity
public class JpaGameUserState {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private int id;
@Column
private String userid;
@PrimaryKeyJoinColumn
private JpaAccount account;
@Column
private String fbUserId;
@Column
private String identifier;
@Column
private String password;
@Column
private String name;
@Column
private String lastName;
@Column
private String documentId;
@Column
private String state;
@Column
private String city;
@Column
private String address;
@Column
private String zipcode;
// this will hold old userstate object format
@Lob
@Column
private String userState;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public JpaAccount getAccount() {
return account;
}
public void setAccount(JpaAccount account) {
this.account = account;
}
public String getFbUserId() {
return fbUserId;
}
public void setFbUserId(String fbUserId) {
this.fbUserId = fbUserId;
}
public String getIdentifier() {
return identifier;
}
public void setIdentifier(String identifier) {
this.identifier = identifier;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getDocumentId() {
return documentId;
}
public void setDocumentId(String documentId) {
this.documentId = documentId;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
public String getUserState() {
return userState;
}
public void setUserState(String userState) {
this.userState = userState;
}
}
你读过[所有类型的@Generated][1]吗
[1] 如果您不向实体提供序列定义,JPA不会应用自动增量,但会应用序列为新插入的行分配新ID,因此您应该使用
GenerationType.IDENTITY
像这样
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
今天我找到了答案
问题是我在account属性中使用了
@PrimaryKeyJoinColumn
注释。删除它使一切按预期进行。尝试将Long
作为id
创建db表,我已经做了,同样的事情也发生了。你的id没有getter和setterfield@lucasfcosta您尝试了一个Long
或Long
作为id类型?为什么您有primaryJoinColumn,列帐户是主键,但不正确?是的,我尝试了,我已经全部尝试了。例如,AUTO可以工作,但是ID字段仍然是VARCHARI。我也尝试过这个方法,同样的事情仍然发生。