当前位置: 首页 > 知识库问答 >
问题:

使用合并函数时出现Spring JPA插入操作异常

牛嘉谊
2023-03-14

人类

package com.example.springjpa.demojpa.entity;

import java.sql.Timestamp;
import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Person {

@Id
@GeneratedValue
private int id;

private String name;
private String location;
private Date birth_date;

public Person() {};



public Person(String name, String location, Date birth_date) {
    super();
    this.name = name;
    this.location = location;
    this.birth_date = birth_date;
}



public Person(int id, String name, String location, Date birth_date) {
    super();
    this.id = id;
    this.name = name;
    this.location = location;
    this.birth_date = birth_date;
}



public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getLocation() {
    return location;
}

public void setLocation(String location) {
    this.location = location;
}

public Date getBirth_date() {
    return birth_date;
}

public void setBirth_date(Timestamp birth_date) {
    this.birth_date = birth_date;
}

@Override
public String toString() {
    return "\n Person [name=" + name + ", location=" + location + ", birth_date=" + birth_date + "]";
}

}

PersonJpaDao类

package com.example.springjpa.demojpa;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.Transactional;

import org.springframework.stereotype.Repository;

import com.example.springjpa.demojpa.entity.Person;

@Repository
@Transactional
public class PersonJpaDao {

@PersistenceContext
EntityManager em;

public Person findById(int id) {
    return em.find(Person.class, id);
}


public Person insert(Person person){
    return em.merge(person);
}

public Person update(Person person){
    return em.merge(person);
}
}

主类

 package com.example.springjpa.demojpa;


import java.util.Date;

import javax.transaction.Transactional;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.example.springjpa.demojpa.entity.Person;

@SpringBootApplication
public class DemoJpaApplication implements CommandLineRunner {

private Logger logger = LoggerFactory.getLogger(this.getClass());

public static void main(String[] args) {
    SpringApplication.run(DemoJpaApplication.class, args);
}

@Autowired
PersonJpaDao personJpaDao;

@Override
public void run(String... args) throws Exception {

    logger.info("Person yBy Id {}", personJpaDao.findById(1));

    logger.info("Update 10003 -> {}", 
            personJpaDao.update(new Person("Pieter", "Utrecht", new Date())));

}
}

当我运行主函数时,查找和更新工作正常,但对于具有与更新相同代码的插入操作,会引发如下异常:

原因:org。springframework。刀。DataIntegrityViolationException:无法执行语句;SQL[n/a];约束[“PUBLIC.PERSON(ID)上的主键];SQL语句:插入到PERSON(出生日期、位置、姓名、ID)值(?,,,?)[23505-196]]; 嵌套的异常是org。冬眠例外ConstraintViolationException:无法执行语句

原因:org。冬眠例外ConstraintViolationException:无法执行语句

共有1个答案

何越
2023-03-14

我也有同样的问题,但我发现它就像是与主键发生冲突,就像一些数据已经存在于一些主键(主键20)和实体管理器也在使用相同的主键(20),因为您正在使用合并方法来更新和创建两者,因此它导致了以前存在的和新创建的冲突,通过合并方法尝试在构造函数中给出id或删除数据

 类似资料:
  • 我的代码有一个错误, 我花了一些时间寻找不同的解决办法,但没有效果。 这是我的代码, 这是我的eclipse控制台的日志。 null 感谢任何帮助。谢谢!

  • 我有一个抽象类,它有一个正在自动连接的依赖项: 我有一个扩展这个抽象类的类: 现在,在进行单元测试时,我可以做到: 这可以很好地工作,但是如果我对ClassA使用构造函数注入,则classC会出现空指针异常。 在第二种情况下,我甚至尝试用普通的构造函数调用替换InjectMocks,但ClassC对象没有被嘲笑。 堆栈跟踪:

  • any 如果至少有一个元素符合给出的判断条件,则返回true。 val list = listOf(1, 2, 3, 4, 5, 6) assertTrue(list.any { it % 2 == 0 }) assertFalse(list.any { it > 10 }) all 如果全部的元素符合给出的判断条件,则返回true。 assertTrue(list.all { it < 10 }

  • 本文向大家介绍C++实现顺序表的常用操作(插入删出查找输出),包括了C++实现顺序表的常用操作(插入删出查找输出)的使用技巧和注意事项,需要的朋友参考一下 实现顺序表的插入,删除,查找,输出操作在C语言中经常用到。下面小编给大家整理实现代码,一起看下吧 代码如下所示: 【Test_Sequence.cpp】 效果如下: 以上所述是小编给大家介绍的C++实现顺序表的常用操作(插入删出查找输出),希望

  • 我正在开发一个应用程序,当没有移动信号覆盖区域时,将数据保存到数据库中。当服务返回时,它将从数据库中获取所有数据并上传到服务器上。 现在我有两个问题。 IntentService在第一次将数据插入数据库时停止。(当网络服务回来时,它还上传服务器上的数据,用于检查网络连接我使用定时器。(我不想停止服务。 当第二次我再次启动它创建的服务,并给出Nullpointerest xception.因为数据库

  • 异步编程对JavaScript语言太重要。Javascript语言的执行环境是“单线程”的,如果没有异步编程,根本没法用,非卡死不可。 ES6诞生以前,异步编程的方法,大概有下面四种。 回调函数 事件监听 发布/订阅 Promise 对象 ES6将JavaScript异步编程带入了一个全新的阶段,ES7的Async函数更是提出了异步编程的终极解决方案。 基本概念 异步 所谓"异步",简单说就是一个