Java 数据表定义不正确;只能有一个自动列,必须将其定义为键错误

Java 数据表定义不正确;只能有一个自动列,必须将其定义为键错误,java,mysql,jdo,datanucleus,Java,Mysql,Jdo,Datanucleus,我在我的项目中使用datanucleus和MySQL。当我试图持久化一个对象时,我收到了异常 表定义不正确;只能有一个自动列,并且它 必须定义为键错误 我的目标设计如下 计划课 public class Plan implements Serializable { private static final long serialVersionUID = 6653821147113556490L; @PrimaryKey @Persistent(valueStrategy = IdGener

我在我的项目中使用datanucleus和MySQL。当我试图持久化一个对象时,我收到了异常

表定义不正确;只能有一个自动列,并且它 必须定义为键错误

我的目标设计如下

计划课

public class Plan implements Serializable {


private static final long serialVersionUID = 6653821147113556490L;

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Column(name = "ID")
private Long id;

@Persistent(column = "NAME")
private String planName;

@Persistent(defaultFetchGroup = "true")
@Element(column = "FEATURES")
@Unowned
private Set<PlanFeature> planFeatures;

@Persistent(column = "CURRENCY_TYPE")
private String currency = "USD";

@Persistent(defaultFetchGroup = "true")
@Element(column = "CURRENCIES")
@Unowned
private Set<Currency> currencies;

@Persistent(column = "COST")
private BigDecimal cost = new BigDecimal(0);

@Persistent(column = "COST_INR")
private BigDecimal costINR = new BigDecimal(0);

@Persistent(column = "DISCOUNT")
private BigDecimal discount = new BigDecimal(0);

@Persistent(column = "TEST_TAKERS_ALLOWED")
private Integer testTakersAllowed;

// How many clients have opted for this plan
@Persistent(column = "OPTED_OWNERS")
private Long planOwners = 0L;

@Persistent(column = "PLAN_LEVEL")
private Integer level;
    ......//Getters and setters
}
货币类

public class Currency implements Serializable {

    private static final long serialVersionUID = 8814737520234672816L;

    @Persistent(column = "ID", valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;

    @Persistent(column = "COUNTRY")
    private String country;

    @Persistent(column = "CURRENCY")
    private String currency;
//Getters and setters
}

我没有在任何一个类中使用多个ID。请帮助我。

货币中的id造成了问题。我添加了@primarykey注释,它开始工作了。谢谢大家的回复

货币中的id造成了问题。我添加了@primarykey注释,它开始工作了。谢谢大家的回复

如果您要引用一些异常消息,那么发布异常和堆栈跟踪,然后人们可以看到异常来自何处。。。也许是你的数据库?如果你要引用一些异常消息,然后发布异常和堆栈跟踪,然后人们可以看到异常来自哪里。。。也许是你的数据库?
public class Currency implements Serializable {

    private static final long serialVersionUID = 8814737520234672816L;

    @Persistent(column = "ID", valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;

    @Persistent(column = "COUNTRY")
    private String country;

    @Persistent(column = "CURRENCY")
    private String currency;
//Getters and setters
}