サイトのコンテンツの「オーナー」を変更すると、次のようなエラーが表示されます。なぜこのエラーが出るのか、私は非常に混乱しています。あたかもアイテム自体のIDを変更しようとしているようです。すべてが正しいように見える...私はすべての適切な場所で探していますか?エンティティの変更を保存できません:インスタンスの識別子が変更されました
エラー
私は、文字列/整数のミスマッチを取得owner.id
owner
に変更
Caused by: org.hibernate.HibernateException: identifier of an instance of com.site.model.User was altered from 13 to 72
私のJSP。
<label class="formLabel">Owner <img src="/images/s.gif" class="required"/><br/>
<form:select path="owner.id" id="owner">
<form:options items="${owners}" itemValue="id" />
</form:select>
</label>
マイサービス
Content cm = em.merge(content);
em.flush();
コンテンツモデル
@NotNull
@JoinColumn(name = "owner_id", referencedColumnName = "id")
@ManyToOne
@IndexedEmbedded
@JsonIgnore
private User owner;
Userモデル
@Id
@Basic(optional = false)
@Column(name = "id")
@GeneratedValue(strategy= GenerationType.IDENTITY)
@JsonIgnore
private Integer id;
私はすべての努力に感謝しています...しかし、これはもっと簡単になるはずです – Webnet
これには他にもさまざまな方法がありますが、さまざまな側面と欠点があります。私はこれをお勧めします。なぜなら、サーバ側の状態に頼らずに、潜在的な悪用を最小限に理解して公開するからです。プロパティエディタを定義する必要があるのは1回だけで、ユーザーをバインドするすべてのコントローラの1行のメソッドとしては「シンプル」です。技術的にはWebDataBinderのデフォルト設定でエディタを設定し、コントローラに何も追加することはできませんが、私はEntityクラスでそれを個人的に行うことをお勧めします。 – Affe
速い応答ありがとう:) – Webnet