Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠一对一更新子项,而不是插入新子项_Java_Spring_Hibernate_Scala - Fatal编程技术网

Java 休眠一对一更新子项,而不是插入新子项

Java 休眠一对一更新子项,而不是插入新子项,java,spring,hibernate,scala,Java,Spring,Hibernate,Scala,我创建了两个类: class Music { ... @OneToOne(mappedBy = "music", cascade = Array(CascadeType.ALL), orphanRemoval = true) @BeanProperty var uploadedFile: UploadedFile = _ ...} 以及: 我正在创建一些UploadedFile实例,Music实例,将UploadedFile实例分配给Music,将Music分配给UploadedFile 现在

我创建了两个类:

class Music {
...
@OneToOne(mappedBy = "music", cascade = Array(CascadeType.ALL), orphanRemoval = true)
@BeanProperty
var uploadedFile: UploadedFile = _
...}
以及:

我正在创建一些UploadedFile实例,Music实例,将UploadedFile实例分配给Music,将Music分配给UploadedFile

现在一切都好了。。它们都用外键music_id保存到DB UploadedFile中

但是,当我在音乐实例中修改UploadedFile时,我使用的是session.saveOrUpdatemusic hibernate会使用相同的音乐id UploadedFile创建新的子行,并更新音乐表行。。。所以我在音乐表中有一行是正确的,在上传文件中有两行是错误的

你能帮我吗?我该换什么

您好, M


我们能看看你们的控制器代码吗?好的,我分析了所有的问题,并提出了解决方案。。这里的问题是:music.uploadedFile=new UploadedFilenew Date,file.getOriginalFilename,file.getBytes,file.getSize,FileType.music,music…它在music中创建uploadedFile的新实例,file_id等于null。。。而且hibernate似乎要求在子类中使用该id,即使是一对一对吗?。。。添加后,更新将按其应该的方式工作:
class UploadedFile{
...
@OneToOne
@JoinColumn(name = "MUSIC_ID")
@BeanProperty
var music: Music = _
...}
@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
  }
}