内部异常:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:

时间:2015-06-23 09:15:02

标签: java mysql jpa jdbc

我想在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);

课程

ToolboxaccountEntity

@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;
}
...

ConnectionEnity

@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]

1 个答案:

答案 0 :(得分:0)

2件事:

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

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

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

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

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