Hibernate一对一更新子节点而不是插入新节点

时间:2015-09-09 19:56:07

标签: java spring hibernate scala

我创建了两个类:

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
  }
}

0 个答案:

没有答案