我有一个与其他3个类有关的一类对象 - 歌曲集,类型,登录。 这是我的POJO类:如何在休眠状态下添加数据以及许多一对多关系
@Entity
@Table(name = "songs")
public class Song implements Serializable {
@Id
@GeneratedValue
@Column(name = "song_id")
private int songId;
@OneToOne(cascade = CascadeType.ALL)
@JoinTable(name = "albums_songs_mapping", joinColumns = @JoinColumn(name = "song_id",
referencedColumnName = "song_id"), inverseJoinColumns = @JoinColumn(name =
"album_id", referencedColumnName = "album_id"))
private Album album;
@Column(name = "title", nullable = false)
private String title;
@Column(name = "rating")
private int rating;
@Column(name = "artists")
private String artist;
@Column(name = "composer")
private String composer;
@OneToOne(cascade = CascadeType.ALL)
@JoinTable(name = "genre_songs_mapping", joinColumns = @JoinColumn(name = "song_id",
referencedColumnName = "song_id"), inverseJoinColumns = @JoinColumn(name =
"genre_id", referencedColumnName = "genre_id"))
private Genre genre;
}
@Entity
@Table(name = "albums")
public class Album {
@Id
@GeneratedValue
@Column(name = "album_id")
private int albumId;
@Column(name = "album_name", length = 250)
private String albumName;
@OneToMany(cascade=CascadeType.ALL)
@JoinTable(name = "albums_songs_mapping", joinColumns = @JoinColumn(name =
"album_id", referencedColumnName = "album_id"), inverseJoinColumns = @JoinColumn(name
= "song_id", referencedColumnName = "song_id"))
private List<Song> songs;
}
@Entity
@Table(name = "genre")
public class Genre {
@Id
@GeneratedValue
@Column(name = "genre_id")
private int genreId;
@Column(name = "genre_name", length = 250)
private String genreName;
@OneToMany(cascade=CascadeType.ALL)
@JoinTable(name = "genre_songs_mapping", joinColumns = @JoinColumn(name = "genre_id",
referencedColumnName = "genre_id"), inverseJoinColumns = @JoinColumn(name =
"song_id",referencedColumnName = "song_id"))
private List<Song> songs;
}
@Entity
@Table(name = "login", uniqueConstraints = {@UniqueConstraint(columnNames =
{"user_name"})})
public class Login {
@Id
@GeneratedValue
@Column(name = "user_id")
private int userId;
@Column(name = "user_name", nullable=false)
private String userName;
@Column(name = "password", nullable=false)
private String password;
@ManyToMany
@JoinTable(name = "user_songs_mapping", joinColumns = @JoinColumn(name = " user_id",
referencedColumnName = "user_id"), inverseJoinColumns = @JoinColumn(name = "song_id",
referencedColumnName = "song_id"))
private List<Song> songs;
}
我试图在我的服务这种方法。但它不起作用。也没有任何错误。请帮帮我。
public void addSong(Song song, int userId) throws Exception {
Session session = HibernateUtil.getSessionFactory().openSession();
try {
session.beginTransaction();
List<Song> songs = new ArrayList<Song>();
songs.add(song);
Genre genre = song.getGenre();
Album album = song.getAlbum();
genre.setSongs(songs);
album.setSongs(songs);
Login login = new Login();
login.setUserId(userId);
login.setSongs(songs);
session.saveOrUpdate(genre);
session.saveOrUpdate(album);
session.saveOrUpdate(login);
session.getTransaction().commit();
} catch (HibernateException e) {
if (session.getTransaction() != null) {
session.getTransaction().rollback();
}
} finally {
session.close();
}
}
你如何确定没有任何错误?您忽略了catch块中的异常。因此,如果发生HibernateException,只需执行回滚并不知道是否有错误。我建议在catch块中添加日志记录,或者修改异常处理来确定是否首先实际发生一些错误。 – 2014-11-22 18:57:56
谢谢。即使在使用saveOrUpdate方法时,我也会遇到MysqlConstraintViolation异常。 – kumuda 2014-11-23 02:47:29