Spring Data JPAに多対一フィールドを保存する際に問題があります。 は、まもなく以下に説明するようにエンティティのユーザーとグループを考えてみましょう:発生したSpringデータUpdate Many To Oneプロパティ
@Entity
@Table(name = "Users")
public class User {
@Basic(optional = false)
@Column(name = "username")
private String username;
@JoinColumn(name = "group_id", referencedColumnName = "id")
@ManyToOne
private Group group;
}
@Entity
@Table(name = "groups")
public class Group {
@Basic(optional = false)
@Column(name = "name")
private String name;
@OneToMany(mappedBy = "group",cascade=CascadeType.PERSIST)
private Collection<User> userCollection;
}
私は、ユーザーエンティティを更新し、例外以下の方法を保存CrudRepositoryとそのグループを変更したいとき: org.hibernate.HibernateException:のインスタンスの識別子をグループは2から1に変更されました。は、春のデータがグループのidフィールドを編集したいときに表示されます。idの参照を変更したいと思います。更新のための
私はDTO形式で表示データを取得し、後述するように、その後、私はドーザーマッパーを使用してエンティティオブジェクトへのDTOオブジェクトを変換:
DozerBeanMapper mapper = new DozerBeanMapper();
// get user by id from database for editing
User user = this.userService.findByIdAndDeletedFalse(form.getId());
// merge view data and entity data using Dozer
mapper.map(form, user);
// save User entity
this.userService.save(user);
UserServiceのが唯一の方法を保存crudRepositoryを呼び出すBeanです。
解決策はありますか?あなたはJPAで許可されていない追跡エンティティのid
を変更しようとしているため
おかげ
ユーザーとグループが同じテーブルを共有するのは正しいですか? – al27091
更新コードを含めてください。 – Naros
親愛なるal27091間違いだった – Farid327