我正在使用Spring,JPA的实现是hibernate。我使用的数据库是Mysql。
该实体将映射到Mysql表,并在我启动Spring应用程序时自动创建该表。但是,当我将ID从Integer更改为String时,表就消失了,不能再创建了。我有点搞不懂为什么会这样。让我发布代码比较如下。
Entity之前:
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private String name;
private String email;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}Entity之后:
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class User {
@Id
private String id;
private String name;
private String email;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}CrudRepository之前:
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component;
import gearon.model.entity.User;
// This will be AUTO IMPLEMENTED by Spring into a Bean called userRepository
// CRUD refers Create, Read, Update, Delete
@Component
public interface UserRepository extends CrudRepository<User, Integer> {
}CrudRepository之后:
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component;
import gearon.model.entity.User;
// This will be AUTO IMPLEMENTED by Spring into a Bean called userRepository
// CRUD refers Create, Read, Update, Delete
@Component
public interface UserRepository extends CrudRepository<User, String> {
}Edit1
控制台中的错误输出是:
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement它是由
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 1000 bytesEdit2
发现一个类似的问题没有答案但投票,似乎更多的人遇到了这个问题。
发布于 2018-12-10 13:11:30
我认为你的问题是related to this。基本上,取决于您正在使用的MySQL版本和字符串的编码,最大VARCHAR大小可能会有所不同。
我不知道这些参数,但为了安全起见,我将定义我的字符串PK的最大长度为191。根据您的版本的MySQL和编码,可以更高。
@Id
@Column(length = 191)
private String id;发布于 2018-12-10 06:05:00
如果没有指定id生成策略,Hibernate将默认使用GenerationType.AUTO。
如果您希望使用String UUID作为id,则可以使用
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(name = "PR_KEY")
private String prKey;https://stackoverflow.com/questions/53700159
复制相似问题