我是新的Spring Boot
和这样的事情,这是第一个项目,我试图探索和以下讲座项目创建,我做了一个实体类与@Entity
和@Table
注解,当我执行项目,两个表在mysql
数据库得到创建即blog
和blog_seq
,我想了解这个blog_seq
是如何创建的,以及它对这个表的意义是什么。Entity
类:
package com.SpringBoot.blog.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint;
@Entity
@Table(name = "posts", uniqueConstraints = {@UniqueConstraint(columnNames = {"titles"})})
public class Posts {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column(name = "titles", nullable = false)
private String title;
@Column(name = "description", nullable = false)
private String description;
@Column(name = "content", nullable = false)
private String content;
public Posts() {
super();
}
public Posts(long id, String title, String description, String content) {
super();
this.id = id;
this.title = title;
this.description = description;
this.content = content;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
application.properties
:
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/blog
spring.datasource.userName=root
spring.datasource.password=123456789
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
mysql
工作台:
谢谢你的帮助!!
尝试稍微更改实体注解和application.properties
,但不起作用。
3条答案
按热度按时间erhoui1w1#
它的发生主要是由于:
AUTO
策略使用数据库序列为id列生成唯一值。如果您记录SQL查询,那么您将能够看到针对blog_seq
的额外查询,以选择下一个唯一值。如果这不是你所期望的,那么你可以用途:
它将使用数据库
auto-increment
id列,并让数据库为id列生成下一个值。这可能对您的项目没有太大影响,但请阅读这两种策略的性能影响。
编辑:
发现这篇文章很好地解释了这些策略。它会帮助你。
https://thorben-janssen.com/jpa-generate-primary-keys/
nue99wik2#
Hibernate需要为每个实体提供唯一的标识符。它是在数据库表
posts
中用@Id
和相应列id
注解的字段。这个字段可以由应用程序在创建新实体(插入新行)时提供,但是很难维护。通常,ID将由数据库或hibernate自动生成。这可以通过注解@GeneratedValue
进行配置。在这个例子中,你已经定义了
GenerationType.AUTO
。这意味着Hibernate可以决定使用哪种id生成。取决于数据库。大多数情况下,它会选择一个数据库序列。MySQL不支持序列。这就是为什么Hibernate要创建一个单独的表来模拟序列。这正是您可以看到的posts_seq
表。只有next_val
列保存posts
表的id
的当前值。iq3niunx3#
A sequence is a user-defined schema-bound object that yields a sequence of integers based on a specified specification
简单地说,它生成序列中的数字。This should give a better idea。
在本例中,
posts_seq
是与posts
表关联的序列生成器。这里使用它来生成id
。posts_seq
中next_value
的值将用于为插入posts
表的下一行生成id
。More info。