org.hibernate.exception.GenericJDBCException:字段'id'没有默认值

时间:2013-11-19 15:53:24

标签: hibernate jpa field default

我在某个应用程序中有这个表,指定了一个生成器和Generationtype.AUTO,但每当我尝试持久化时,我从服务器收到错误,指出id没有默认值。 这是在jboss服务器AS7.x上运行,数据库引擎是mysql。

到目前为止,我还没有结论为什么会发生这种情况。有人可以帮忙吗?

@SequenceGenerator(name = "id", sequenceName = "some_set_seq", initialValue = 1, allocationSize = 1)
@Table(name = "some_set")
public class SomeSet implements Serializable {

private static final long serialVersionUID = 633453570945334348L;
private long id;
private String name;
private String description;
private List<SomeItem> items;
private List<SomeEntity> someEntities;
private Date lastModification;

public SomeSet() {}

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO, generator = "id")
  public long getId() {
    return id;
  }

  public void setId(long id) {
    this.id = id;
  }

  @Column(name = "name")
  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  @Column(name = "description")
  public String getDescription() {
    return description;
  }

  public void setDescription(String description) {
    this.description = description;
  }

  @OneToMany(cascade = CascadeType.ALL)
  @LazyCollection(LazyCollectionOption.FALSE)
  @JoinColumn(name = "some_set_id")
  @ForeignKey(name="FK_someItem_someSet")
  public List<SomeItem> getItems() {
    return items;
  }

  public void setItems(List<SomeItem> items) {
    this.items = items;
  }

  @ManyToMany(mappedBy = "someSets", cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
  @ForeignKey(name="FK_someLink_someSet")
  public List<SomeEntity> getEntities() {
    return someEntities;
  }

  public void setEntities(List<SomeEntity> someEntities) {
    this.someEntities = someEntities;
  }

  @EntityProperty(name = "lastmodificationdate")
  @Column(name = "last_modification_date")
  public Date getLastModification() {
    return lastModification;
  }

  public void setLastModification(Date lastModification) {
    this.lastModification = lastModification;
  }
}

3 个答案:

答案 0 :(得分:1)

这是非常普遍的例外和直接的例外。确保您的数据模型具有标记为特定列的默认值的属性。您的数据模型与域模型之间不匹配...请检查您的架构/表并相应地进行更改。

干杯!

答案 1 :(得分:0)

数据库是由一些单独实现的脚本创建的,而不是由hibernate创建的。 我们发现在该软件的某些其他版本中,该表具有为id而定义的自动增量,现在它已失败。

放回去使它工作正常。

答案 2 :(得分:0)

我遇到了同样的问题,发现表中的主键没有标记为自动增量。请将ID字段自动增加并解决您的问题。