Spring Hibernate在我尝试插入新记录时使用update

Spring Hibernate在我尝试插入新记录时使用update,spring,hibernate,Spring,Hibernate,我有一个如上所述的数据库结构。然后我试着插入一个新的记录,以下面的格式发布 { "userId": 2, "firstName": "project", "lastName": "principa;", "username": "principal1", "password": "$2a$04$eFytJDGtjbThXa80FyOOBuFdK2IwjyWefYkMpiBEFlpBwDH.5PM0K", "institution": {

我有一个如上所述的数据库结构。然后我试着插入一个新的记录,以下面的格式发布

{
    "userId": 2,
    "firstName": "project",
    "lastName": "principa;",
    "username": "principal1",
    "password": "$2a$04$eFytJDGtjbThXa80FyOOBuFdK2IwjyWefYkMpiBEFlpBwDH.5PM0K",
    "institution": {
        "institutionID": 3,
        "institutionName": "new_test_schoo;"
    },
    "authorities": [
        {
            "authorityID": 2,
            "authority": "principal"
        }
    ]
}
然后从控制台和表中,我可以看到机构被插入,但hibernate试图进行更新

Hibernate: insert into users (first_name, institution_id, last_name, password, username) values (?, ?, ?, ?, ?)
Hibernate: update authorities set authority=?, user_id=? where authority_id=?
我使用以下方法插入新记录

@Override
public void saveUser(Users theUser) {
    Session currentSession = sessionFactory.getCurrentSession();
    currentSession.save(theUser);
}
这是我的实体类用户

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="user_id")
private int userId;
@Column(name="first_name")
private String firstName;
@Column(name="last_name")
private String lastName;
@Column(name="username")
private String username;
@Column(name="password")
private String password;

@ManyToOne(cascade={CascadeType.DETACH, CascadeType.MERGE,CascadeType.PERSIST, CascadeType.REFRESH})
@JoinColumn(name="institution_id")
private Institution institution;

@JsonManagedReference
@OneToMany(fetch=FetchType.EAGER,
            mappedBy="user", 
            cascade={CascadeType.ALL})
private List<Authorities> authorities;
...setters and getters
权限表中不存在,但为什么hibernate尝试使用更新而不是插入?我怎样才能解决这个问题

任何帮助都将不胜感激

===============================更新================================

有一个快速更新,我通过将
CascadeType
更改为
CascadeType.ALL
解决了这个问题。但我觉得这是不对的。就像我想删除一个单一用户一样,该机构也将被删除。我说得对吗?但我已尝试删除
@GeneratedValue
@Id
。这只会让我犯错误。我认为,
@GeneratedValue
不会影响结果。就像我分配Id一样,数据库将存储该Id。但是,如果我不分配Id,数据库将自动生成它


有什么想法吗?

在hibernate上进行级联时,如果级联的实体具有已持久化的主键,hibernate将不会持久化新实体


对于更新,我假设您的关系是双向的,因此hibernate在添加新用户时需要更新权限。

我在某些情况下使用注释@JsonManagedReference和@JsonBackReference时遇到问题(循环引用)


尝试用JsonIgnore替换并手动运行saveAuthorities方法。

如果要在插入到Authority时设置id,必须从Authority实体中删除
@GeneratedValue

找到了一个潜在的修复方法

我在下面重新定义了Users类

我尝试分离插入步骤,现在效果很好。
现在一切都很好。感谢您提供的所有帮助。

我理解您想要看到的内容,就好像我提供了ID一样,那么Hibernate会认为这已经存在。但是数据库中不存在userID和institutionID,我也证明了hibernate。但是,hibernate插入了该机构并尝试使用insert插入新用户。这里有什么不同?您好,谢谢您的回复。用户类中有一个OMANY,权限类中有多个OMANY。OneToMany由用户映射,在authorities表中我使用JoinColumn(user_id),它是users表中的主键,但在authorities表中是外键。那么在这种情况下,hibernate不会尝试创建新实体吗?如果是,我如何要求创建一个新的?是否从users和Authority类中删除CascadeType.Persistent?若要要求hibernate级联新对象,对象不应包含id或从模型中删除generatedValue注释
  "authorities": [
        {
            "authorityID": 2,
            "authority": "principal"
        }
    ]