Mysql错误:字段' XXX'没有默认值

时间:2014-07-30 09:59:00

标签: java mysql hibernate jpa

我在此错误中被阻止了几天,并且不知道如何解决它。我有一张包含曲目列表的实体CD。以下是我使用JPA定义它们的方法:

    @Entity
    public class Cd extends Media {

    @OneToMany(cascade = CascadeType.ALL)
    @JoinTable(name="CD_TRACKS",joinColumns={ @JoinColumn(name="CD_ID", referencedColumnName = "ID") },
            inverseJoinColumns={ @JoinColumn(name="TRACK_ID",table = "TRACKS", referencedColumnName = "ID") })
    private List<Tracks> tracks;

   //other fields + getters/setters

  }

Tracks类:

    @Entity
    public class Tracks {

        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;

        @NotNull
        private String name;

        private int duration;

        //getters and setters

   }

以下是创建表格的CD_TRACKS脚本:

CREATE TABLE CD_TRACKS(
  CD_ID BIGINT NOT NULL, 
  TRACK_ID BIGINT NOT NULL,
  FOREIGN KEY (CD_ID) REFERENCES CD(ID),  
  FOREIGN KEY (TRACK_ID) REFERENCES TRACKS(ID)
);

当我尝试在数据库中插入新CD时,出现此错误:

Caused by: java.sql.SQLException: Field 'TRACK_ID' doesn't have a default value

我尝试设置SET GLOBAL sql_mode='';,但它仍然无法正常工作。我还在Tracks表中验证了id是否被定义为primary并且具有auto_increment。

有人能给我一些如何解决这个问题的见解。

感谢您的帮助

[ EDIT ]例如我用来保存CD:

Cd cd = new Cd();
cd.setAvailable(true);
cd.setTitle("The essential of Michael Jackson");

Tracks tracks = new Tracks();
tracks.setName("Billie Jean");
tracks.setDuration(10);
cd.setTracks(Arrays.asList(tracks));
cdCatalogService.saveMedia(cd);

1 个答案:

答案 0 :(得分:0)

对于来到这里的人,我的一个项目出现了类似的错误。当我尝试一切时,我无法发现实体的任何错误。我重新创建了数据库,并且相同的基础开始工作。它似乎是由数据库上的一些内部问题引起的,这个问题在我试图保留的其中一个字段上标记了一些缺失值,这些字段在我已经修改过的应用服务器端。