映射到已经保留的对象

时间:2016-07-29 21:16:56

标签: hibernate spring-data-jpa

问题

我有两个clasess - ProfileImage

现在Profile的实例变量为Image

class Profile{
..
..
Image image;
..
..


getters and setters

..
}

现在,情景是

1)图像已保存在图像表中 - 因为它是使用ImageRepo类'单独保存的。 defualt save()方法。

class Image{

@Id
@GeneratedValue
private Long id;
private String name;
private String url;

..
..

//getters and setters
}

2)保存Profile后 - 我在传入的Profile对象中有图片的网址JSON

3)现在,因为Image的网址是作为JSON中的对象嵌入的 - 保存后Profile

我收到以下错误。

  

org.hibernate.TransientPropertyValueException:对象引用一个   未保存的瞬态实例 - 保存之前的瞬态实例   潮红

正在尝试将传入的嵌入式Image对象保存在Profile JSON中并且没有CASCADE - 但这不是意图。

我只想将已保存的\ persisted Image对象分配到Profile

这里做什么?

JSON:
        {
        ..
        ..
        "profile":{
                    "name":"fsdf",
                     "image":{
                              "name":"sdfsd",
                              "url":"http://....." 
                             }
                   }

    ..
    ..

1 个答案:

答案 0 :(得分:0)

为什么不根据传入的JSON从数据库中查找Image

一个非常天真和琐碎的例子:

public class Controller {
  public void someProfileMethod(String profileJson) {
    final Profile profile = // create profile from JSON
    final Image image = imageService.getImageByName( profile.image.name );
    if ( image != null ) {
      profile.setImage( image );
    }
    else {
      profile.setImage( null );
    }
    profileService.saveProfile( profile );
  }
}