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

将新实体插入数据库时出错,因为它与重复的键值冲突

牟辰龙
2023-03-14

我试图创建CRUD测试来显示我的JPA程序的工作情况,但是当我创建一个新的实体并将其提交到数据库时,它给了我奇怪的错误。表供应商只有一个限制条件,即自动生成的唯一索引。我会先贴出课程,然后再贴出我尝试用它们做什么

下面是表和限制项的SQL

CREATE TABLE SUPPLIER 
(   SUPPLIERID INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY, 
COMPANYNAME VARCHAR(40), 
CONTACTNAME VARCHAR(30), 
CONTACTTITLE VARCHAR(30), 
ADDRESS VARCHAR(60), 
CITY VARCHAR(15), 
POSTALCODE VARCHAR(10), 
COUNTRY VARCHAR(15), 
PHONE VARCHAR(24), 
FAX VARCHAR(24)
);
ALTER TABLE SUPPLIER ALTER SUPPLIERID NOT NULL;

ALTER TABLE SUPPLIER ALTER COMPANYNAME NOT NULL;

ALTER TABLE SUPPLIER ADD CONSTRAINT PK_SUPPLIER PRIMARY KEY (SUPPLIERID);

这是我的供应商主键:

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "SUPPLIERID")
private Integer supplierid;
  Supplier sup = new Supplier("Test","Test","Test","Test","Test","Test","Test","Test","Test");
  em.persist(p);
public void Save() {

    em.getTransaction().begin();  
    em.getTransaction().commit();

}

[EL警告]:2014-09-09 17:17:33.67--UnitOfWork(1407675409)--异常[EclipseLink-4002](Eclipse Persistence Services-2.5.1.V20130918-F2B9FC5):org.Eclipse.Persistence.Exceptions.DatabaseException内部异常:java.sql.SQLINTegrityConstraintViolationException:该语句将导致“Supplorer”上定义的“pk_supplorer”标识的唯一或主键约束或唯一索引中的键值重复,因此终止。错误代码:-20001呼叫:插入供应商(地址、城市、公司名称、联系人名称、联系人标题、国家/地区、传真、电话、邮编)值(?、?、?、?、?、?、?、?、?、?、?、?)bind=>[9个参数绑定]查询:InsertObjectQuery(peristency.supplier[supplierID=null])

共有1个答案

应向晨
2023-03-14

保存方法让我有点恼火。就像上面写的,它执行一个空事务,不是吗?难道不应该是这样的吗:

public void Save() {
    ...
    em.getTransaction().begin();  
    ...
    Supplier sup = new Supplier("Test","Test","Test","Test","Test","Test","Test","Test","Test");
    em.persist(p);
    ...
    em.getTransaction().commit();
    ...
}

会不会是问题的编码缩短得太多了,从而把图片弄乱了?你能给我们提供从开始整个交易到提交的完整编码吗?

我记得有一段时间,我也有过类似的问题。主要的一点是,我试图在一个事务中坚持两次--但这是不可能的--抱怨一个重复的关键问题。也许这是对你案子的暗示。

 类似资料:
  • 这是我的代码: 有人能知道这段代码中的错误是什么,请修复它。

  • 我忙于一项学校作业,我有一个由三个表组成的基本access数据库。Book、Reader和BookRated,其中as BookRated是交集表,主键userName来自Reader和ISBN来自Book组成BookRated的复合主键(作为外键)。 我正试图将信息插入书签表中,但出现以下错误

  • 我正在尝试读取文本文件,然后对其应用一些数据验证规则。添加规则后,我将数据写回Excel文件。 但是当尝试将其写回excel文件时,我收到了这个错误: 线程“主”org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException:保存失败:保存包时发生错误:部分 /docProps/app.xml无法保存在流中,编组器org.apache.p

  • 我正在尝试从我创建的一个简单的联系人表单中插入数据。我正在使用phpMyAdmin 下面是PHP(出于安全考虑,我删除了define语句,但我可以毫无问题地建立到数据库的链接。) 当有人点击论坛上的submit按钮后,代码就会运行,据我所知,这是正常工作的。 该错误发生在php代码的末尾。正在输出“SLQ Insert Statement FAILD”,但未发布mysql错误。 我的数据库/表的设

  • Iam在数据库中插入时出现异常 下面的persistence.xml。 http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd“version=”1.0“>

  • 而不是这个冗长的消息,我只是想显示“对不起-记录已经存在。” 这可能吗?