【问题标题】:How to make id in jpa-entity with String type?如何使用 String 类型在 jpa-entity 中创建 id?
【发布时间】:2018-09-27 10:27:25
【问题描述】:

使用弹簧+jpa。 有实体,它包含字符串类型的id和字段名称:

@Entity
class Customer{

 @id
 String id;

 String name;
...
}

如果 id - 字段类型 int - 一切正常。

如果 id 是 Srting 类型: SQLSyntaxErrorException:指定的键太长;最大密钥长度为 1000 字节

使用 MySQL 数据库。

create table riskmetric (id integer not null, name varchar(255), primary key (id)) engine=MyISAM

【问题讨论】:

  • 该类的关联表的定义是什么?即 DDL
  • @BillyFrost 这次只有 hello world 程序,所以只有实体有两个字段 - id 和 name。
  • 不回答问题。数据库表定义为什么?列类型、长度、可空性等。如果您没有先创建表,您的 JPA 提供商可能会为您创建表
  • @BillyFrost 是的,我使用了 create-drop,所以,应用程序启动后,此表将由应用程序创建(而不是手动)
  • 删除表重新创建……PK不是INT,需要重新创建。

标签: spring jpa


【解决方案1】:

使用@Column解决

@Id
@Column(length = 10)
private String id;

【讨论】:

  • 没有回答你的问题。您说“制作字符串类型的 id”。 “int”不是字符串类型。
【解决方案2】:

这样你可以创建String类型的可生成id:

@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(name = "PR_KEY")
private String prKey;

【讨论】:

    猜你喜欢
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    相关资源
    最近更新 更多