【发布时间】:2021-01-09 10:42:24
【问题描述】:
我正在开发一个 spring boot 项目,通过 Hibernate 链接到 MySQL 数据库。 当数据库开始为空时,一切都运行良好。但是,当启动应用程序之前运行虚拟数据 data.sql 文件,然后通过应用程序插入对象时,插入不会考虑以前的 ID,因此会导致重复条目,直到达到行数:
我会尝试用一个例子更好地解释:
- 在应用程序启动时,data.sql 文件插入 3 个虚拟用户。
- 到达注册页面以添加新用户并提交时,Hibernate 返回错误“主键重复条目 1”,然后“主键重复条目 2”和主键重复条目 3 ' 重试两次后。
- 在第四次重试时,添加用户。
因此 ID 会自动递增,但不会考虑之前通过 data.sql 插入的行。
请注意,我尝试过使用 User 类的生成类型(AUTO / IDENTITY)但没有成功,并且我的休眠数据源处于创建删除模式。
更新: 用户实体:
@Data
@Builder
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "users")
public class User {
public final static Role DEFAULT_ROLE = new Role();
static {
DEFAULT_ROLE.setId(2);
DEFAULT_ROLE.setRole("NORMAL");
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
private int id;
@Column(name = "user_name")
@Length(min = 5, message = "*Your user name must have at least 5 characters")
@NotEmpty(message = "*Please provide a user name")
private String userName;
@Column(name = "email")
@Email(message = "*Please provide a valid Email")
@NotEmpty(message = "*Please provide an email")
private String email;
@Column(name = "password")
@Length(min = 5, message = "*Your password must have at least 5 characters")
@NotEmpty(message = "*Please provide your password")
private String password;
@Column(name = "name")
@NotEmpty(message = "*Please provide your name")
private String name;
@Column(name = "last_name")
@NotEmpty(message = "*Please provide your last name")
private String lastName;
@Column(name = "active")
private Boolean active;
@ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
@JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles;
@Column(name = "phone_number")
@NotEmpty(message = "*Please provide a phone number")
private String phoneNumber;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "address_id", referencedColumnName = "address_id")
private Address address;
}
知道什么会解决它吗? :)
干杯。
【问题讨论】:
-
您可以发布您的用户实体吗?也许那里有些错字......
-
刚刚添加,谢谢!
标签: mysql spring spring-boot hibernate