以前使用数据导入数据时,java无法使用save()进行插入。sql
我非常抱歉,如果我不能开始另一个帖子,这是连接到我的前一个,但我的问题是有点不同
我注意到,只要我从未使用应用程序中的spring.datasource.initialization-mode=always
行将数据添加到数据库中,我就可以在数据库中保存新数据。并对数据进行了分析。包含几个insert语句的sql文件。一旦我使用该文件插入数据,我就可以访问数据并将其显示给用户,但我无法创建任何新数据,因为我遇到以下错误
ERROR: duplicate key value violates unique constraint "joke_pkey"
Detail: Key (id)=(1) already exists.
有人知道怎么帮我吗?我正在做一项采访任务,我打算首先使用这些数据导入数据。sql文件,然后再添加一些数据
下面是我的代码: Spring Boot using save never inserts a row inside of a Postgresql table
编辑-有人建议直接在这里添加我的代码,并说出我的尝试
我尝试用应用程序属性初始化数据库,然后重新启动应用程序,但没有最后一行,并将spring.jpa.hibernate.ddl-auto
设置为none
。但即便如此,它也没有起作用。我真的希望它能像那样工作。因为如果表是空的,我使用我创建的函数来填充它,即使在重新启动服务器之后,一切都像一个符咒一样工作(我再次保留ring.jpa.hibernate.ddl-auto
到none
以防止数据被删除)
在我的笑话课上,我也尝试过简单地将GenerationType.AUTO
策略改为GenerationType.TABLE
策略,但这似乎也没有改变任何事情
申请。属性:
spring.datasource.url=jdbc:postgresql://localhost:5432/flyway_demo
spring.datasource.username=bob
spring.datasource.password=bob123
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=create
spring.datasource.initialization-mode=always
我的Web控制器具有post功能:
@PostMapping("/post")
public String insertJoke(JokeForm jokeForm) {
int categoryid = jokeForm.getCategoryId();
String content = jokeForm.getContent();
databasController.insert(categoryid, content);
return "redirect:/";
}
正在调用其插入函数的DBController
public Joke insert(int categoryid, String content) {
return jokeRepository.save(new Joke(categoryid, content));
}
我的大部分数据都是:
@Entity
public class Joke {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(columnDefinition = "serial")
private Long id;
@NotNull
@Column(name = "category_id_FK")
private long categoryId;
@NotBlank
private String content;
@Column(columnDefinition = "integer default 0")
private int likes = 0;
@Column(columnDefinition = "integer default 0")
private int dislikes = 0;
public Joke() {
}
public Joke(long categoryid, String content) {
this.setCategoryid(categoryid);
this.setContent(content);
}
// id
public Long getId() {
return this.id;
}
// id
public void setId(Long id) {
this.id = id;
}
// categoryid
public long getCategoryid() {
return this.categoryId;
}
public void setCategoryid(long categoryid) {
this.categoryId = categoryid;
}
// content
public String getContent() {
return this.content;
}
public void setContent(String content) {
this.content = content;
}
// likes
public int getLikes() {
return this.likes;
}
public void setLikes(int likes) {
this.likes = likes;
}
// dislikes
public int getDislikes() {
return this.dislikes;
}
public void setDislikes(int dislikes) {
this.dislikes = dislikes;
}
}
笑话库:
@Repository
public interface JokeRepository extends JpaRepository<Joke, Integer> {
Joke findById(long id);
List<Joke> findByCategoryid(int categoryid);
}
# 1 楼答案
看来你所需要做的就是改变世代类型。自动转换为GenerationType。身份
这背后的原因是序列,如果使用AUTO,序列可能会不同步。因为hibernate使用自己的序列,而不是postgres在使用串行时创建的序列