我正在尝试创建一个带有Annotations的Privilege类,其主键是一个String。我会在插入时手动分配它们。因此,不需要hibernate为它生成值。我正试图做那样的事情:
@Id
@GeneratedValue(generator = "assigned")
@Column(name = "ROLE_NAME", nullable = false)
private String roleName;
但它引发了异常:
Caused by: org.hibernate.AnnotationException: Unknown Id.generator: assigned
如何配置带注释的String
主键?
答案 0 :(得分:24)
由于roleName
未自动生成,因此您不应仅使用@GeneratedValue
对其进行注释:
@Id
@Column(name = "ROLE_NAME", nullable = false)
private String roleName;
答案 1 :(得分:4)
只需使用@Id
注释,即可以定义哪个属性是实体的标识符。您不需要使用@GeneratedValue
注释,因为我认为您不希望hibernate为您生成此属性。
即使在基于XML配置的方法中,它也是一个可选标记,可以跳过。
答案 2 :(得分:4)
@Id
@Column(name = "USER_ID",unique=true,columnDefinition="VARCHAR(64)")
private String userId;
通过在保存或更新期间使用列注释表示columnDefinition类型,这对我有用。