从堆栈溢出的信息来源中,我了解到我们可以使用下面的@GeneratedValue(strategy=GenerationType.INTITY)注释在mysql表中使用已经创建的自动递增列:
@Id
@Column(name="employee_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
但是假设,我们实际上需要从hibernate创建一个id列为自动递增的新表(这样我们就不必手动进入数据库并将列属性更改为自动递增),您能告诉我在实体类中使用的适当注释吗?
我已经有了如下的配置文件条目:
<property name="hbm2ddl.auto">update</property>
我想从hibernate以编程方式在mysql数据库中创建一个带有AUTOINCREMENT属性的id列。
我已经尝试了注释@GeneratedValue(策略=GenerationType.IDENTITY),但这只使用了手动创建的自动增量列,它实际上并没有创建一个。
由于MySQL没有序列,Hibernate创建了一个表< code>hibernate_sequence来模拟序列。您可以决定是对db模式中的所有表使用全局序列,还是对每个表使用专用序列。因为这个库在某种程度上更抽象,并且这个特定的机制不受支持。您可以使用< code>IDENTITY,但建议使用此序列表。请阅读以下帖子:https://discourse . hibernate . org/t/generated-value-strategy-auto/6481/2。
如果你真的想使用自动递增,你可以试试(Hibernate 5):
@GeneratedValue(strategy = GenerationType.AUTO, generator = "native")
@GenericGenerator(name = "native", strategy = "native")
下列的https://thorben-janssen.com/5-things-you-need-to-know-when-using-hibernate-with-mysql/#2_Mappings_Problems_with_GenerationTypeAUTO_in_Hibernate_5