【问题标题】:Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:内部异常:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:
【发布时间】:2015-09-09 00:12:44
【问题描述】:

我想通过在 MYSQL 数据库中使用 JPA 来持久化对象。这是我的创建脚本:

CREATE TABLE toolboxAccount (
idtoolboxAccount INTEGER UNSIGNED  NOT NULL   AUTO_INCREMENT,
username VARCHAR(30)  NOT NULL  ,
password_2 VARCHAR(30)  NOT NULL    ,
PRIMARY KEY(idtoolboxAccount));



CREATE TABLE config (
idconfig INT  NOT NULL   AUTO_INCREMENT,
toolboxAccount_idtoolboxAccount INTEGER UNSIGNED  NOT NULL  ,
defaultExportPath VARCHAR(255)  NULL    ,
PRIMARY KEY(idconfig)  ,
INDEX config_FKIndex1(toolboxAccount_idtoolboxAccount),
FOREIGN KEY(toolboxAccount_idtoolboxAccount)
REFERENCES toolboxAccount(idtoolboxAccount)
  ON DELETE CASCADE
  ON UPDATE CASCADE);

CREATE TABLE connection (
idconnection INT  NOT NULL   AUTO_INCREMENT,
toolboxAccount_idtoolboxAccount INTEGER UNSIGNED  NOT NULL  ,
url VARCHAR(255)  NULL  ,
username VARCHAR(30)  NULL  ,
password_2 VARCHAR(30)  NULL  ,
site VARCHAR(30)  NULL    ,
PRIMARY KEY(idconnection)  ,
INDEX connection_FKIndex1(toolboxAccount_idtoolboxAccount),
FOREIGN KEY(toolboxAccount_idtoolboxAccount)
 REFERENCES toolboxAccount(idtoolboxAccount)
  ON DELETE CASCADE
  ON UPDATE CASCADE);

CREATE TABLE export (
idexport INTEGER UNSIGNED  NOT NULL   AUTO_INCREMENT,
connection_idconnection INT  NOT NULL  ,
nameOfExportZIP VARCHAR(255)  NOT NULL    ,
PRIMARY KEY(idexport)  ,
INDEX export_FKIndex1(connection_idconnection),
FOREIGN KEY(connection_idconnection)
REFERENCES connection(idconnection)
  ON DELETE CASCADE
  ON UPDATE CASCADE);

类是


工具箱帐户实体

@Entity
@Table(name = "toolboxaccount", schema = "", catalog = "toolboxtest")
public class ToolboxaccountEntity {

@Id
@GeneratedValue(generator="my_seq")
@SequenceGenerator(name="my_seq",sequenceName="MY_SEQ", allocationSize=1)
private long idtoolboxAccount;
private String username;
private String password_2;



@OneToOne(cascade = CascadeType.PERSIST)
private ConfigEntity configEntity;

@OneToMany(cascade = CascadeType.PERSIST)
private List<ConnectionEntity> connections;

public List<ConnectionEntity> getConnections() {
    return connections;
}

public void setConnections(List<ConnectionEntity> connections) {
    this.connections = connections;
}
...

连接实体

@Entity
@Table(name = "connection", schema = "", catalog = "toolboxtest")
public class ConnectionEntity {
@Id
@GeneratedValue(generator="my_seq")
@SequenceGenerator(name="my_seq",sequenceName="MY_SEQ", allocationSize=1)
private long idconnection;
private String url;
private String username;
private String password_2;
private String site;


@Column(name = "idconnection")
public long getIdconnection() {
    return idconnection;
}

public void setIdconnection(int idconnection) {
    this.idconnection = idconnection;
}
...

ToolboxAccountEntity 的持久化有效,但是当我添加 ConnectionEntity 时出现以下错误:

Exception in thread "main" javax.persistence.RollbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`toolboxtest`.`connection`, CONSTRAINT `connection_ibfk_1` FOREIGN KEY (`toolboxAccount_idtoolboxAccount`) REFERENCES `toolboxaccount` (`idtoolboxAccount`) ON DELETE CASCADE ON UPDATE CASCADE)
Error Code: 1452
Call: INSERT INTO toolboxtest.connection (PASSWORD_2, SITE, URL, USERNAME) VALUES (?, ?, ?, ?)
    bind => [4 parameters bound]

【问题讨论】:

    标签: java mysql jpa jdbc


    【解决方案1】:

    两件事:

    1) 如果要进行插入操作,请确保数据库中不存在该记录。

    2) 如果要进行更新操作,请确保该记录存在于数据库中。

    3) 请记住,记录必须是良好的关系,主键,外键。

    当记录已经存在时,这种错误很常见。

    问候!如果您更正了问题,请告诉我们

    【讨论】:

    • 您好,谢谢您的回答,我删除了表并重新创建了它,现在我收到以下错误:线程“main”中的异常 javax.persistence.RollbackException:异常 [EclipseLink-4002] (Eclipse持久性服务 - 2.6.0.v20150309-bf26070):org.eclipse.persistence.exceptions.DatabaseException 内部异常:java.sql.SQLException:字段 'toolboxAccount_idtoolboxAccount' 没有默认值......不应该是“idtoolboxAccount " 添加为外键?
    • 嗯.. toolboxAccount.idtoolboxAccount 这是您的表的主键,它没有收到任何值。您是否错过了向该主键插入值?但是,如果它是自动增量的,您不必插入任何值,系统会为您完成。
    • 我不想为该主键插入一个值,因为我希望这是自动完成的,所以我设置了 AUTO_INCREMENT。我通过添加主键尝试了另一件事,但我得到了同样的错误
    • 检查表格,并检查您是否在代码中插入具有正确关系的记录。目前,我不能告诉你更多..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 2015-10-08
    • 2013-12-02
    • 2015-12-22
    • 2014-05-20
    • 1970-01-01
    相关资源
    最近更新 更多