0

OneToOne 関係を持つ 2 つのエンティティ (User.class & Image.class) があります。画像エンティティの更新中に問題が発生しました。既存の画像オブジェクトがない場合に機能します。新しい画像を作成し、(セッターを使用して) ユーザー オブジェクトに追加して、次のように保存するだけです。

public void addImage(Image image){
    image.setUser(this);
        setImage(image);
    }

..

 //method used to save the user object
    @Override
    @Transactional(readOnly=false)
    public User save(User user) {
        User aUser = userRepository.save(user);
        return aUser;
    }

イメージの更新時に問題が発生します。各画像プロパティを既存の画像オブジェクトに手動で追加する必要があります (次の方法を参照)。上記の addImage() を使用すると、既存のオブジェクトを削除せずに新しいレコードを保存するだけで、データベースに複数のレコードが表示されます。

誰かが見て、問題を特定するのを手伝ってもらえますか? ありがとう

//Add a new Profile Image
public void addImage(Image image){
    Image oldImg = getImage();
    image.setUser(this);
    if(oldImg == null){
        setImage(image);
        return;
    }
        oldImg.setName(image.getName());
        oldImg.setVersion(image.getVersion());
    }


User & Image entity extracts

User Entity

@OneToOne(targetEntity=Image.class, 
        mappedBy="user",
        fetch=FetchType.LAZY, 
        cascade={CascadeType.ALL},
        orphanRemoval=true)
private Image image;
...


Image Entity

@JsonIgnore
@OneToOne
@JoinColumn(name="userid")
private User user;
4

1 に答える 1

0

equals & hashcode両方のエンティティに実装する必要があります。永続化プロバイダは、これらのメソッドがないとオブジェクトが存在するかどうかを判断できません。

Eclipse を使用している場合は、エディターを右クリックし、ソースに移動して を選択することで、これらのメソッドを生成できますGenerate Equals and Hashcode

于 2013-06-02T17:22:56.883 に答える