【问题标题】:JPA is creating a VARCHAR column for my INT fieldJPA 正在为我的 INT 字段创建一个 VARCHAR 列
【发布时间】:2016-03-02 14:28:45
【问题描述】:

大家,

目前我正在尝试根据我的类规范创建一个表,我收到一个错误,即“列 'ID' 的列说明符不正确”。这是因为我的 ID 字段是 VARCHAR(255) 并且具有 AUTO_INCREMENT,您可以在以下错误中看到:

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

}

【问题讨论】:

  • 尝试Long 作为id然后尝试创建db表
  • 我已经这样做了,同样的事情发生了。
  • 你的 id 字段没有 getter 和 setter
  • @lucasfcosta 您尝试使用Longlong 作为id 类型?
  • 为什么你有primaryJoinColumn那个列账号是主键,不正确

标签: java mysql jpa


【解决方案1】:

你读过[所有类型的@Generated] [1]

[1]http://www.objectdb.com/java/jpa/entity/generated

【讨论】:

  • 是的,我试过了,我都试过了。例如,.AUTO 有效,但 ID 字段仍然是 VARCHAR
【解决方案2】:

如果您没有向实体提供序列定义,JPA 将不会应用 auto_increment,但它会应用序列为新插入的行分配新 id,因此您应该使用 GenerationType.IDENTITY 像这样

 @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

【讨论】:

  • 我也试过这个,同样的事情仍然发生。
【解决方案3】:

今天我找到了答案。

问题是我在帐户属性中使用了@PrimaryKeyJoinColumn 注释。删除它使一切都按预期工作。

【讨论】:

    猜你喜欢
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    相关资源
    最近更新 更多