我创建了两个类:
class Music {
...
@OneToOne(mappedBy = "music", cascade = Array(CascadeType.ALL), orphanRemoval = true)
@BeanProperty
var uploadedFile: UploadedFile = _
...}
和
class UploadedFile{
...
@OneToOne
@JoinColumn(name = "MUSIC_ID")
@BeanProperty
var music: Music = _
...}
我正在创建一些UploadedFile实例,Music实例,将UploadedFile的实例分配给Music,将Music分配给UploadedFile。
现在一切都很好..它们都保存到DB(UploadedFile with foreign key music_id)..
但是当我在Music实例中修改UploadedFile时,我正在使用session.saveOrUpdate(音乐),hibernate使用相同的music_id(UploadedFile)创建新的子行并更新Music table行...所以我有一个音乐表中的行(正确),以及UploadedFile中的两行(不正确)
你能帮助我吗,我应该改变什么?
问候, 微米。
@Controller
@RequestMapping(value = Array("/music"))
@SessionAttributes(Array("music"))
class MusicAdministrationController extends Logger {
@Autowired
@BeanProperty
var musicManager: MusicService = _
@RequestMapping(value = Array("/list"), method = Array(RequestMethod.GET))
def showMusicList(model: ModelMap): ModelAndView = {
val musicList = musicManager.getAllItems()
val mav = new ModelAndView("musicList")
mav addObject("musicList", musicList)
mav addObject("music", new Music)
mav
}
@RequestMapping(value = Array("/add"), method = Array(RequestMethod.POST))
def addNewMusic(@ModelAttribute music: Music, bindingResult: BindingResult, sessionState: SessionStatus): ModelAndView = {
if (bindingResult hasErrors) {
return new ModelAndView("/music/list")
}
sessionState isComplete()
if (music.music_id == 0) {
music createdBy = "admin"
music date = new Date
val file = music.attachFile
music.uploadedFile = new UploadedFile(new Date, file.getOriginalFilename, file.getBytes, file.getSize,
FileType.MUSIC, music)
musicManager.addOrUpdateItem(music)
} else {
music modifiedBy = "admin"
music modifyDate = new Date
val file = music.attachFile
if (file.getSize > 0)
music.uploadedFile = new UploadedFile(new Date, file.getOriginalFilename, file.getBytes, file.getSize,
FileType.MUSIC, music)
musicManager addOrUpdateItem music
}
new ModelAndView("redirect:/music/list")
}
@RequestMapping(value = Array("/remove/{id}"), method = Array(RequestMethod.GET))
def removeMusic(@PathVariable("id") musicId: Int, model: ModelMap): ModelAndView = {
musicManager deleteItem musicId
new ModelAndView("redirect:/music/list")
}
@RequestMapping(value = Array("/edit/{id}"), method = Array(RequestMethod.GET))
def editMusic(@PathVariable("id") musicId: Int, model: ModelMap): ModelAndView = {
val mav = new ModelAndView("musicList")
mav addObject("music", musicManager getItemById musicId)
mav
}
}