java - 通过 JDBC 语句执行 DDL“更改表学生添加约束 UK_fe0i52si7ybu0wjedj6motiim 唯一(电子邮件)”时出错
问题描述
我正在尝试使用 MySQL 数据库启动 Spring Boot/Spring Data JPA 项目。但是在email
字段上设置唯一约束存在问题。
我的代码:
import javax.persistence.*;
import static javax.persistence.GenerationType.SEQUENCE;
@Entity(name = "Student")
@Table(name = "student")
public class Student {
@Id
@SequenceGenerator(name = "student_sequence", sequenceName = "student_sequence", allocationSize = 1)
@GeneratedValue(strategy = SEQUENCE, generator = "student_sequence")
@Column(name = "id", updatable = false)
private Long id;
@Column(name = "first_name", nullable = false, columnDefinition = "TEXT")
private String firstName;
@Column(name = "last_name", nullable = false, columnDefinition = "TEXT")
private String lastName;
@Column(name = "email", nullable = false, columnDefinition = "TEXT", unique = true)
private String email;
@Column(name = "age")
private Integer age;
public Student(Long id, String firstName, String lastName, String email, Integer age) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.age = age;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", email='" + email + '\'' +
", age=" + age +
'}';
}
}
应用程序属性:
spring.datasource.url=jdbc:mysql://localhost/mydatabase
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.jpa.properties.hibernate.format_sql=true
我尝试更改spring.jpa.hibernate.ddl-auto=create-drop
为spring.jpa.hibernate.ddl-auto=update
,并且在这一切都完美之后,但我不需要update
,我需要create-drop
。
另外,我尝试更改spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
为MySQL5Dialect
等MySQL55Dialect
。但没有任何改变。
解决方案
我有同样的问题
对我有用的是从@Column中删除columnDefinition="TEXT"
你应该有这个:@Column(name = "email", nullable = false, unique = true)
或者
您可以从@Column中删除unique=true并使用 SQL 手动添加它
alter table student add constraint ~constraint_name~ unique(email(~length~)
例子:
alter table student add constraint student_unique_email unique(email(50))
祝你在 amigosCode 课程上好运。
推荐阅读
- struct - 访问 Zig 0.7.0 中 C 函数按值返回的结构
- ios - 如何为特定的视图控制器编码?- 苹果斯威夫特/Xcode
- python - 当我在另一个函数循环中调用 Python 函数时,它的行为不同
- tabs - 设置安全标头时同时显示所有 ZK 选项卡
- sql - 在列上带有 where 子句的 SELECT 语句
- javascript - 具有输入类型的 GraphQL 突变不会将参数传递给解析器
- python - 如果用户在先前给定的列表中,则限制用户仅输入值
- php - 如何使用 PHP 实现服务器端文本框和复选框验证?
- powerbi - 我如何允许用户将报告从 power bi 服务导出为 pdf
- scala - 使用分区来决定一个流是否应该进入下一个流,如果没有,则让流从开始的下一个滴答中拾取它(Akka)