Jhipsterはorg.hibernate.StaleStateExceptionを返します:バッチ更新が更新[0]から予期しない行数を返しました。実際の行数:0; 予想:1

xBoLLo:

マイクロサービスアーキテクチャ(レジストリ、ゲートウェイ、UAAサーバー)でJHipsterを使用しています。私のuaaサーバー内のデフォルトのjhipsterユーザーをプロファイルエンティティで拡張しました(@mapsIdアノテーションとこの記事の1対1の関係を使用:https ://www.jhipster.tech/tips/022_tip_registering_user_with_additional_information.html )。

私の問題は次のとおりです。新しいユーザーをjhipsterゲートウェイに登録すると、プロファイルが作成され、ユーザーとプロファイル間で共有IDを使用してデータベースに書き込まれますが、すべて正常に機能します。ここで、プロファイルエンティティを削除したい場合、ユーザーエンティティも削除する必要があります(プロファイルがないユーザーはいないため)が、次の例外が発生します。

org.springframework.orm.ObjectOptimisticLockingFailureException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; nested exception is org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1

ユーザーエンティティを削除すると、プロファイルも削除されるので、カスケードが機能するはずです。

ユーザーエンティティ:

@Entity
@Table(name = "jhi_user")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class User extends AbstractAuditingEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;
...

@OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
    private Profile profile;

プロファイルエンティティ

@Entity(name = "Profile")
@Table(name = "profile")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Profile implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    private Long id;
...
@OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "id", referencedColumnName = "id")
    @MapsId
    private User user;

liquibaseを使用したプロファイルテーブルの外部キー制約:

<addForeignKeyConstraint baseColumnNames="id"
                                 baseTableName="profile"
                                 constraintName="fk_profile_user_id"
                                 referencedColumnNames="id"
                                 referencedTableName="jhi_user"
                                 onDelete="CASCADE"
                                 />

ここで何か見逃していますか?また、JPAアノテーションの代わりにhibernateアノテーションを使用してみましたが、何も変更されなかったため、これがHibernate自体の問題であると考えています。

xBoLLo:

プロファイルテーブルに新しい「user_id」列を追加して問題を解決しました。外部キー制約をid列(ユーザーテーブル)とuser_id列(プロファイルテーブル)に追加しました。私が欲しかったものではありませんが、それはうまくいきます。関係の両側でカスケードを有効にして、ユーザーを削除するとプロファイルが自動的に削除されるようにしてください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ