Singer类@Entity
public class Singer implements Serializable{ private int SingerID;
private List<Song>songs = new ArrayList<Song>();
@Id
@GeneratedValue
public int getSingerID() {
return SingerID;
}
public void setSingerID(int singerID) {
SingerID = singerID;
}
@OneToMany(mappedBy = "singer",cascade = {CascadeType.ALL},fetch = FetchType.EAGER)
public List<Song> getSongs() {
return songs;
}
public void setSongs(List<Song> songs) {
this.songs = songs;
}
}
Song类@Entity
public class Song implements Serializable{
private int songID; /*歌曲ID*/
private Singer singer; /*歌手*/
@Id
@GeneratedValue
public int getSongID() {
return songID;
}
public void setSongID(int songID) {
this.songID = songID;
}
@ManyToOne(cascade={CascadeType.ALL})
@JoinColumn(name="singerID")
public Singer getSinger() {
return singer;
}
public void setSinger(Singer singer) {
this.singer = singer;
}
}
Session session = HibernateSessionFactory.getSession();
session.beginTransaction();
Song song = new Song();
song.setSongName("songName4");
Song song1 = new Song();
song1.setSongName("songName");
Singer singer = new Singer();
singer.setSingerName("singer4");
List<Song>songs = new ArrayList<Song>();
songs.add(song);
songs.add(song1);
singer.setSongs(songs);
session.save(singer);
session.beginTransaction().commit();
保存singer后 2个Song对象虽然都能被存入到数据库中 但是singerID这列都是NULL 也就是说我用singer.getSongs();得到的都是NULL 如果我把mappedBy = "singer"去掉就可以生成中间表 singer.getSongs();就可以正常取到值 请大家帮忙看下是哪里出错了
public class Singer implements Serializable{ private int SingerID;
private List<Song>songs = new ArrayList<Song>();
@Id
@GeneratedValue
public int getSingerID() {
return SingerID;
}
public void setSingerID(int singerID) {
SingerID = singerID;
}
@OneToMany(mappedBy = "singer",cascade = {CascadeType.ALL},fetch = FetchType.EAGER)
public List<Song> getSongs() {
return songs;
}
public void setSongs(List<Song> songs) {
this.songs = songs;
}
}
Song类@Entity
public class Song implements Serializable{
private int songID; /*歌曲ID*/
private Singer singer; /*歌手*/
@Id
@GeneratedValue
public int getSongID() {
return songID;
}
public void setSongID(int songID) {
this.songID = songID;
}
@ManyToOne(cascade={CascadeType.ALL})
@JoinColumn(name="singerID")
public Singer getSinger() {
return singer;
}
public void setSinger(Singer singer) {
this.singer = singer;
}
}
Session session = HibernateSessionFactory.getSession();
session.beginTransaction();
Song song = new Song();
song.setSongName("songName4");
Song song1 = new Song();
song1.setSongName("songName");
Singer singer = new Singer();
singer.setSingerName("singer4");
List<Song>songs = new ArrayList<Song>();
songs.add(song);
songs.add(song1);
singer.setSongs(songs);
session.save(singer);
session.beginTransaction().commit();
保存singer后 2个Song对象虽然都能被存入到数据库中 但是singerID这列都是NULL 也就是说我用singer.getSongs();得到的都是NULL 如果我把mappedBy = "singer"去掉就可以生成中间表 singer.getSongs();就可以正常取到值 请大家帮忙看下是哪里出错了
public class Singer implements Serializable{ private int SingerID;
private List<Song>songs = new ArrayList<Song>(); 你把
private List<Song>songs = new ArrayList<Song>();
改成
private List<Song>songs;
试试。
private List<Song>songs;这句上面 另外不要new
singerID是不是SingerID?
这里改了SingerID了 但是还是不行啊
1、属性命名首字母小写
2、一个属性名中有多个单词时第二个单词首字母大写(SingerID最好写成singerId)
3、@OneToMany(mappedBy = "SingerID",cascade = {CascadeType.PERSIST,CascadeType.REFRESH}, fetch = FetchType.LAZY, targetEntity = Song.class)这里mappedBy = "SingerID",应填属性名singerId
4、@JoinColumn(name="singerID")这里应是表的字段名,我不知道singerID是不是你的表字段名
这里是我不小心写错了 是singerID
song.setSinger(singer);
song1.setSinger(singer);