Jhipster返回org.hibernate.StaleStateException:批处理更新从更新[0]返回了意外的行数;实际行数:0;预期:1

时间:2019-12-05 11:33:19

标签: java spring hibernate spring-data-jpa jhipster

我在微服务架构(注册表,网关,uaa服务器)中使用JHipster。我使用配置文件实体在uaa服务器中扩展了默认的jhipster用户(根据本文https://www.jhipster.tech/tips/022_tip_registering_user_with_additional_information.html使用@mapsId批注和一对一关系)。

我的问题如下:如果我在jhipster网关中注册了一个新用户,则会创建我的个人资料,并使用该用户和个人资料之间的共享ID将其写入数据库,一切正常。现在,如果我想删除配置文件实体,也应该删除该用户实体(因为没有配置文件的用户),但是我得到以下异常:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { scrollView.setOnScrollChangeListener(object : View.OnScrollChangeListener { override fun onScrollChange(v: View?, scrollX: Int, scrollY: Int, oldScrollX: Int, oldScrollY: Int) { val x = scrollY - oldScrollY if (x > 0) { //scroll up //show fab icon } else if (x < 0) { //scroll down //hide fab icon } else { } } }) }

如果删除用户实体,我的个人资料也会被删除,因此级联应该起作用。

用户实体:

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;

使用liquibase的配置文件表的外键约束:

@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;

我在这里想念什么吗?我还尝试使用hibernate批注而不是JPA批注,但没有进行任何更改,因此我认为这可能是Hibernate本身的问题。

1 个答案:

答案 0 :(得分:0)

我通过在个人资料表中添加新的“ user_id”列解决了我的问题。我向id列(用户表)和user_id列(配置文件表)添加了外键约束。不完全是我想要的,但是可以。只需确定要在关系的两边都启用级联,以便在删除用户时自动删除配置文件。