有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

以前使用数据导入数据时,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-autonone以防止数据被删除)

在我的笑话课上,我也尝试过简单地将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) 个答案

  1. # 1 楼答案

    看来你所需要做的就是改变世代类型。自动转换为GenerationType。身份

    这背后的原因是序列,如果使用AUTO,序列可能会不同步。因为hibernate使用自己的序列,而不是postgres在使用串行时创建的序列