我在此错误中被阻止了几天,并且不知道如何解决它。我有一张包含曲目列表的实体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);
答案 0 :(得分:0)
对于来到这里的人,我的一个项目出现了类似的错误。当我尝试一切时,我无法发现实体的任何错误。我重新创建了数据库,并且相同的基础开始工作。它似乎是由数据库上的一些内部问题引起的,这个问题在我试图保留的其中一个字段上标记了一些缺失值,这些字段在我已经修改过的应用服务器端。